下载图像的最佳方法

时间:2014-09-25 08:37:54

标签: image asp.net-web-api

我有一个简单的网站(WebAPI),它在get方法中返回一堆相册。每张专辑都有标题,艺术家等属性。此处的属性是图像(专辑照片)属性。每张专辑都有一张图片,将图片发送回客户端的最佳方式是什么。它应该作为二进制数据作为专辑对象的一部分发送,例如

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

或者我应该将路径发送到相册对象中的图像并让客户端单独下载图像吗?

像     公共班级专辑     {         字符串标题;         string imagePath;     }

2 个答案:

答案 0 :(得分: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);
        }
    }
}

答案 1 :(得分: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;
    }