从ASP.NET Web Api 2.x控制器我正在使用
StreamContent
类型的实例提供文件.请求文件时,其blob位于数据库中,并打开blob流.然后将blob流用作StreamContent实例的输入.
简化了,我的控制器动作看起来类似于:
[HttpGet]
[Route("{blobId}")]
public HttpResponseMessage DownloadBlob(int blobId)
{
// ... find the blob in DB and open the 'myBlobStream' based on the given id
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new StreamContent(myBlobStream)
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = myBlobStream.Length;
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "foo.txt",
Size = myBlobStream.Length
};
return result;
}
当我在Chrome中点击端点(第35页)时,它表示它正在解析主机(localhost),当文件下载后,它会显示在下载栏中.但是,我想知道启用Chrome(或任何其他浏览器)显示下载进度需要什么?
我认为这可以通过包含内容类型,内容长度和内容处置等标题信息来解决,但是从我尝试过的内容来看,这没有任何区别.
最佳答案 原来我的实施是正确的.我关闭了提琴手,一切都按预期工作.不知道fiddler是否会以某种方式等待整个响应在它通过代理发送之前完成 – 至少,这可以解释为什么浏览器保持在“解析主机”状态直到整个文件被下载.