1

我在我的 ASP.NET 应用程序中遇到了一个非常奇怪的问题。

当用户单击下载文件的按钮时,Internet Explorer / Chrome / Firefox 会显示保存对话框,但文件的名称是 ASPX 页面的名称(例如,如果页面名为 Download.aspx,则下载对话框会显示“文件”下载.zip)。有时,当使用 MIME 类型播放时,下载对话框会显示“Download.aspx”。似乎您正在尝试下载该页面,但实际上是正确的文件。

ZIP 扩展会发生这种情况,这是我的代码(我认为非常标准):


        this.Response.Clear();
        this.Response.ClearHeaders();
        this.Response.ClearContent();
        this.Response.AddHeader("Content–Disposition", "attachment; filename=" + file.Name);
        this.Response.AddHeader("Content-Length", file.Length.ToString());
        this.Response.ContentType = GETCONTENTYPE(System.IO.Path.GetExtension(file.Name));
        this.Response.TransmitFile(file.FullName);
        this.Response.End();

GetContentType 函数只返回文件的 MIME。我尝试使用application/x-zip-compressedmultipart/x-zip,当然还有application/zip。使用 application/zip Internet Explorer 8 显示 XML 错误。

非常感谢任何帮助。

问候,

4

3 回答 3

2

我正在查看我为处理类似机制所做的工作,这是我正在执行的步骤(粗体项目似乎是唯一真正的区别):

Response.Clear();
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", fileName));
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; // Excel 2007 format
// ... doing work...
Response.AddHeader("Content-Length", outputFileInfo.Length.ToString());
Response.TransmitFile(outputFileInfo.ToString());
HttpContext.Current.Response.End(); // <--This seems to be the only major difference

虽然 this.Response 和 HttpContext.Current.Response 应该是一样的,但可能因为某些原因不一样。

于 2009-10-06T15:05:20.533 回答
1

我认为类似Response.Redirect(ResolveUrl(file.FullName))而不是Response.TransmitFile(file.FullName)你想要的。听起来您实际上希望他们的浏览器指向文件,而不仅仅是传输文件作为对当前请求的响应。

编辑:另请参阅此 SO 问题如何检索和下载服务器文件(File.Exists 和 URL)

更新:根据您的反馈,我认为就是您正在寻找的。

于 2009-10-06T15:04:35.103 回答
0

用于 Excel 导出

   Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.xls", fileName));

它适用于 IE 和 Firefox。

于 2012-10-31T17:31:31.250 回答