3

我是第一次发帖,所以请原谅我对发帖技术的无知。我一直在寻找几个小时,似乎找不到这个问题的答案,所以希望房间里更聪明的人能提供帮助?我有一个用 .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 上运行,但不能在原生浏览器或适用于 Android 的 Google Chrome 上运行。

我上次尝试报告的标头(我也尝试不使用 Length 并改用分块传输编码):

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,下载就可以正常工作。有人遇到这个吗?

4

1 回答 1

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");
于 2013-11-09T03:32:07.327 回答