我正在关注此示例,但是当下载开始时它会挂起,并且在一分钟后它会显示服务器错误。我想在所有数据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();
}
}
}
答案 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;
}