Mvc - 如何以4k块的形式传输大文件以供下载

时间:2016-05-11 15:01:45

标签: c# asp.net-mvc asp.net-web-api streaming

我正在关注此示例,但是当下载开始时它会挂起,并且在一分钟后它会显示服务器错误。我想在所有数据id发送到客户端之前响应结束。

你知道我可以做到的另一种方式或为什么它不起作用吗?

Writing to Output Stream from Action

private void StreamExport(Stream stream, System.Collections.Generic.IList<byte[]> data)
        {
            using (BufferedStream bs = new BufferedStream(stream, 256 * 1024))
            using (StreamWriter sw = new StreamWriter(bs))
            {
                foreach (var stuff in data)
                {
                    sw.Write(stuff);
                    sw.Flush();
                }

            }
        }

1 个答案:

答案 0 :(得分:1)

你能展示调用方法吗?传入的Stream是什么?是响应流吗?

有许多有用的类可供您使用,因为它们默认情况下会自动丢弃。如果使用StreamContent,则可以使用构造函数重载来指定缓冲区大小。我相信默认值是10kB。

从记忆中这里我不完整:

[Route("download")]
[HttpGet]
public async Task<HttpResponseMessage> GetFile()
{
    var response = this.Request.CreateResponse(HttpStatusCode.OK);

    //don't use a using statement around the stream because the framework will dispose StreamContent automatically

    var stream = await SomeMethodToGetFileStreamAsync();

    //buffer size of 4kB
    var content = new StreamContent(stream, 4096);

    response.Content = content;

    return response;
}