我是第一次发布海报,请原谅我对发布技术的无知。我一直在寻找几个小时,似乎无法找到答案,所以希望房间里聪明的人可以帮忙吗?我有一个用.net MVC 4编写的Web应用程序,它连接到多个云服务API。然后,用户可以从此Web应用程序下载文件。我已经能够在除android之外的所有平台上使用它。当我尝试在Android上下载文件时,它会挂起并最终失败。下载时有文件名,但说< unknown>。有人有解决方案吗?这是我正在使用的代码:
if (String.IsNullOrEmpty(type))
{
type = "application/octet-stream";
}
byte[] file = openDropBoxFile(path, filename);
if (file != null)
{
return File(file, type, filename);
}
感谢Slack Shot,遗憾的是它没有改变android上的行为。以下是我在错误地实施您的解决方案时更改代码的方法:
if (String.IsNullOrEmpty(type))
{
type = "application/octet-stream";
}
byte[] file = openDropBoxFile(path, filename);
if (file != null)
{
var cd = new System.Net.Mime.ContentDisposition
{
FileName = filename,
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(file, type);
}
有关该问题的更多信息。我能够在Firefox for Android上运行下载,但不能使用原生浏览器或谷歌Chrome for Android。
我上一次尝试报告的标题,(我也试过没有长度,而是使用了分块传输编码):
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 45113
Content-Type: application/pdf
Server: Microsoft-IIS/8.0
Content-Disposition: attachment; filename="testfile.pdf"
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 09 Nov 2013 17:55:40 GMT
更新:我们已经解决了部分问题!!
如果我们关闭SSL,则下载工作正常。有人碰到这个吗?
答案 0 :(得分:0)
您可能想尝试添加Content-Disposition标头。
var cd = new System.Net.Mime.ContentDisposition
{
// for example foo.bak
FileName = "Summary.csv",
// always prompt the user for downloading, set to true if you want
// the browser to try to show the file inline
Inline = false,
};
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(model.SummaryDownload.Content().ToArray(), "text/csv");