Лучший подход к загрузке изображения

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

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

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

Like Public Class Album { string title; строка путь к изображению; }


person user3547774    schedule 25.09.2014    source источник


Ответы (2)


Вы можете увидеть это сообщение Загруженный файл как поток в контроллере (ASP.NET MVC 3) будет автоматически удален? в качестве ссылки.

Вы можете использовать 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);
        }
    }
}
person Michael Sync    schedule 25.09.2014
comment
Спасибо за указатель. Можете ли вы также сказать мне, как лучше всего загрузить изображение отдельно в другом запросе и отправить путь в исходном объекте или отправить байты изображения в самих исходных объектах? - person user3547774; 25.09.2014
comment
Вы хотите, чтобы пользователь загружал ваши изображения? Например, пользователь нажмет кнопку загрузки, и эти изображения будут загружены на компьютер пользователя. Или вы просто отображаете эти изображения на клиентском сайте (html и js)? Если вы просто хотите отобразить эти изображения на HTML-странице, имеет смысл вернуть список ссылок на изображения. - person Michael Sync; 25.09.2014
comment
Я просто хочу отображать изображения на стороне клиента. Итак, вы говорите, что нужно отправить URL-адреса ссылок на изображения, а затем загрузить каждое отдельное изображение отдельно? - person user3547774; 25.09.2014
comment
вы можете отправить URL-адрес из API. Затем на стороне клиента вы устанавливаете этот URL-адрес для тега изображения. Браузер автоматически загрузит изображение. - person Michael Sync; 25.09.2014

Вместо прохождения

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;
    }
person Mike_G    schedule 25.09.2014