加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 23:41:55 所属栏目:asp.Net 来源:网络整理
导读:我们正在尝试使用ASP.Net WebApi返回大图像文件,并使用以下代码将字节流传输给客户端. public class RetrieveAssetController : ApiController{ // GET api/retrieveasset/5 public HttpResponseMessage GetAsset(int id) { HttpResponseMessage httpRespons
我们正在尝试使用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/发表了关于这种做法的博客.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读