【发布时间】:2021-04-12 16:40:43
【问题描述】:
我正在通过 Web API 端点压缩多个文件,然后将其下载到我的浏览器。直到最后一步,我可以看到 zip 文件有一个文件名,并且它的大小已设置,但由于某种原因,下载后它以 1Kb 文件的形式返回。
我已将包含 zip 文件的二进制数组保存到我的本地驱动器,然后通过 Web API 将其返回给浏览器,这确实是正确的。我可以打开 zip 文件并查看其内容,所以我不确定是什么导致了问题。
显然不是压缩,因为我可以将它保存在本地并且它是正确的,所以我只能假设它必须与端点有关,但是什么?我使用自定义的 IHttpActionResult:
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
HttpResponseMessage response = new HttpResponseMessage();
var filename = this.Document.GetFilename();
var mimeType = MimeMapping.GetMimeMapping(filename);
response.Content = new StreamContent(new MemoryStream(this.Document.ToData()));
response.Content.Headers.ContentLength = this.Document.Data.Length;
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = filename
};
response.Content.Headers.ContentType = new MediaTypeHeaderValue(mimeType);
return Task.FromResult(response);
}
对我来说它看起来不错,奇怪的是,如果我下载 MS Word 或其他文档,使用自定义 IHttpActionResult 和相同的端点下载就好了。
为了通过 Web API 和 JQuery 下载文件,我找到了以下文章:
DOWNLOAD FILE WITH JQUERY AND WEB API 2.0 IHTTPACTIONRESULT
可能是在文件完全下载之前保存 blob,但为什么它适用于其他文件?
如果您希望我提供任何其他代码,请告诉我,但如果有人有任何建议会很棒。
谢谢。
UPDATE-1:
与之前所说的不同,我的单个文件下载(例如 MS Word)也不再工作,并且还会生成一个 1kb 文件而不是相关文件。有些事情发生了变化,但我不确定是什么。当我发现时会发布更新。
【问题讨论】:
-
this.Document.Data.Length给出的值是否正确? -
@amy 据我所知,确实如此。我已经纠正了我的问题,因为我刚刚注意到我说它适用于 MS word 之类的东西,而我的问题只是 Zip 文件,但事实并非如此。问题出在所有文件上,所以我必须更改某些内容,因为我最初只处理单个文件下载但我不确定是什么。我看看能不能发现什么。我会更新我的问题以免引起混淆,希望我能找出发生了什么变化并发布更新。真的很奇怪,设置长度的时候,肯定是大于1k的值。
标签: c# asp.net-web-api asp.net-web-api2