下载 – 使用ASP.Net Webapi流式传输大图像

前端之家收集整理的这篇文章主要介绍了下载 – 使用ASP.Net Webapi流式传输大图像前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们正在尝试使用ASP.Net WebApi返回大图像文件,并使用以下代码将字节流传输给客户端.
public class RetrieveAssetController : ApiController
{

    // GET api/retrieveasset/5
    public HttpResponseMessage GetAsset(int id)
    {
        HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
        string filePath = "SomeImageFile.jpg";

        MemoryStream memoryStream = new MemoryStream();

        FileStream file = new FileStream(filePath,FileMode.Open,FileAccess.Read);

        byte[] bytes = new byte[file.Length];

        file.Read(bytes,(int)file.Length);

        memoryStream.Write(bytes,(int)file.Length);

        file.Close();

        httpResponseMessage.Content =  new ByteArrayContent(memoryStream.ToArray());

        httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

        httpResponseMessage.StatusCode = HttpStatusCode.OK;

        return httpResponseMessage;
    }
}

上面的代码工作正常,但我们处理的一些文件可能是2 GB和更大的大小导致连接超时.我们以前使用过的代码(使用HttpHandlers)来响应响应流来保持连接的成功.

byte[] b = new byte[this.BufferChunkSize];
int byteCountRead = 0;

while ((byteCountRead = stream.Read(b,b.Length)) > 0)
{
    if (!response.IsClientConnected) break;

    response.OutputStream.Write(b,byteCountRead);
    response.Flush();
}

我们如何使用类似的技术使用前面显示的新的WebAPI编程模型?

先谢谢你

解决方法

是的,您可以使用PushStreamContent.如果将它与异步执行(即异步lambdas)组合在一起,您可能会获得更有效的结果.

我在本月初 – http://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/发表了关于这种做法的博客.

这个例子使用了一个视频文件,其原理是一样的 – 把数据的数据推下给客户端.

猜你在找的asp.Net相关文章