2014-02-10 2 views
0

У меня есть контроллер веб-api, и я хочу написать функцию, которая имитирует загрузку файла (а не настоящий файл - просто то, что генерируется на лету).Имитировать загрузку файла с помощью WEB API

Что мне нужно сделать, это отправить этот параметр api с размером файла и вернуть ему «двоичный» файл, созданный «на лету».

что-то похожее на это PHP код:

<?php 
    $filesize = 20971520; // 20 Mo 

    if (isset($_POST['d'])) { 
     header('Cache-Control: no-cache'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Content-Length: '. $filesize); 

     for($i = 0 ; $i < $filesize ; $i++) { 
      echo chr(255); 
     } 
    } 
?> 

Ближайшим решение, которое я нашел, было что-то вроде этого:

HttpResponseMessage response = new HttpResponseMessage(); 
response.Content = new StreamContent(new FileStream(@"path to image")); // this file stream will be closed by lower layers of web api for you once the response is completed. 
response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png"); 

Я пытался играть с ним и изменить его, но не везло.

был бы appriciate, если бы кто-то мог указать мне в правильном направлении и помочь мне.

Thanks

ответ

1

Что-то вроде этого?

public class FakeDownloadController: ApiController 
{ 
    public HttpResponseMessage Get([FromUri] int size) 
      { 
       var result = new HttpResponseMessage(HttpStatusCode.OK); 
       byte[] data = new byte[size]; 
       var stream = new MemoryStream(data); 
       result.Content = new StreamContent(stream); 
       result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/binary"); 
       var contentDisposition = new ContentDispositionHeaderValue("attachment"); 
       contentDisposition.FileName = string.Format("{0}.{1}", "dummy","bin"); 
       result.Content.Headers.ContentDisposition = contentDisposition; 
       return result; 
      } 
} 

использование:

http://localhost:port/api/FakeDownload/?size=6543354 

возвратит ~ 6 MB файл, заполненный NULL, называемый "dummy.bin".

Надеюсь, что это поможет.

Смежные вопросы