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

Export a file by showing Save As Dialogue

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中播放。

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

我为 chrome 尝试了以下代码:

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

但是我在Chrome中传输我的.wav文件仍然没有成功。

这就解决了;通过将内容的 mime-type 更改为通用内容:

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 最初提供它的唯一原因是因为它在尝试直接访问文件时不知道如何处理该文件。上面的方法是强制下载,不是直接在浏览器中play/render。 但是 您可以右键单击 link(s) 和 select Save link as....

*我想如果你在服务器上为文件类型错误地设置 mime-type 然后使用你原来的 Response.Redirect 方法那么你可以但是你会弄乱服务器并导致无休止的头痛。

如果您想更改 Chrome 每次询问您将下载文件保存到哪里,您需要进入 设置 ,单击 显示高级设置... 然后向下滚动到 下载 标题,您会在其中看到如下内容: