2014-09-25 4 views
2

У меня есть простой сайт (WebAPI), который возвращает кучу альбомов в методе get. Каждый альбом имеет такие атрибуты, как название, исполнитель и т. Д. Атрибутом здесь является атрибут изображения (альбом). Каждый альбом имеет изображение, что является лучшим способом отправить изображение обратно клиенту. Должно ли оно быть отправлено в виде двоичных данных в качестве части объекта альбома, например, какЛучший способ скачать изображение

Public Class Album 
{ 
    string title; 
    byte[] image; 
} 

Или я должен отправить путь к изображению в объекте альбома и есть клиент загрузить изображение отдельно?

Публичный классный альбом { название строки; string imagePath; }

ответ

0

Вы можете увидеть это сообщение The downloaded file as stream in controller (ASP.NET MVC 3) will automatically disposed? в качестве справки.

Вы можете использовать FileStream.

protected override void WriteFile(HttpResponseBase response) { 
    // grab chunks of data and write to the output stream 
    Stream outputStream = response.OutputStream; 
    using (FileStream) { 
     byte[] buffer = new byte[_bufferSize]; 
     while (true) { 
      int bytesRead = FileStream.Read(buffer, 0, _bufferSize); 
      if (bytesRead == 0) { 
       // no more data 
       break; 
      } 
      outputStream.Write(buffer, 0, bytesRead); 
     } 
    } 
} 
+0

Спасибо за указатель. Можете ли вы также рассказать мне, что лучше всего подходит для загрузки изображения отдельно в другом запросе и отправки пути в исходном объекте или отправки байтов изображения в самих исходных объектах? – user3547774

+0

Вы хотите, чтобы пользователь загрузил ваши изображения? Как пользователь нажмет кнопку «загрузить», и эти изображения будут загружены на компьютер пользователя. Или вы просто показываете эти изображения на сайте клиента (html и js)? Если вы просто хотите отображать эти изображения на странице HTML, имеет смысл вернуть список ссылок на изображения. –

+0

Я просто хочу отображать изображения на стороне клиента. Итак, что вы говорите, это отправить похожие изображения на изображения, а затем загрузить каждое отдельное изображение отдельно? – user3547774

0

Вместо передачи

Public class Album 
{ 
    string title; 
    byte[] image; 
} 

обратно клиенту, я хотел бы изменить image к int imageId:

Public class Album 
{ 
    string Title{get;set}; 
    int ImageId{get;set}; 
} 

Затем создайте контроллер WebAPI, который обрабатывает изображения с методом, написанным как это:

public async Task<HttpResponseMessage> Get(HttpRequestMessage request, int imageId) 
    { 

     byte[] img = await _myRepo.GetImgAsync(imageId); 

     HttpResponseMessage msg = new HttpResponseMessage(HttpStatusCode.OK) 
     { 
      Content = new ByteArrayContent(img) 
     }; 
     msg.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png"); 

     return msg; 
    } 
Смежные вопросы