通过显示“另存为对话”导出文件

时间:2015-01-29 15:31:43

标签: c# asp.net google-chrome internet-explorer savefiledialog

string fileName = "1001-1000-1_29_2015 2_04_22 PM.wav";
string filePath = Server.MapPath("Audio") + "\\" + fileName;

在IE中,我使用以下行导出.wav文件。

Response.Redirect("Audio/" + fileName);

由于Response.Redirect();用于将用户重定向到任何内容(页面,文件等)。所以在IE中它向用户显示SaveAsDialogue以保存它。

但是在chrome中,浏览器的默认行为是重定向到指定的文件并在chrome中播放。

我想通过在两个浏览器中提供.wav来导出我的SaveAsDialogue文件。

我为chrome尝试了以下代码:

Response.Clear();
Response.ContentType = "Audio/wav";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.TransmitFile(filePath);
Response.Flush();
Response.End();

但我仍然无法在Chrome中传输.wav文件。

1 个答案:

答案 0 :(得分:2)

这将对它进行排序;通过将内容的mime类型更改为通用内容:

Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.TransmitFile(filePath);
Response.Flush();
Response.End();

编辑:这里是我正在使用的确切代码,它也适用于WAV文件:

Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename="+ fileName);
Response.WriteFile(file);
Response.End();

保存到对话是一个无法强制*的客户端功能。 IE首先提供它的唯一原因是因为它在尝试直接访问文件时不知道如何处理该文件。上面的方法是强制它下载,而不是直接在浏览器中播放/渲染。 ,您可以右键点击链接并选择Save link as...

*我想如果您要在服务器上为文件类型错误地设置mime-type,那么请使用原始的Response.Redirect方法然后您可以但是您正在弄乱服务器并导致没有结束的头痛。

如果您想更改Chrome以便每次向您询问保存下载的位置,您需要进入设置,请点击显示高级设置... 然后滚动在下载标题下,您会看到以下内容:

Downloads Setting in Chrome