问候!
我正在挠头,想知道为什么当我做以下事情时:
Response.Redirect(@"http://www.example.com/file.exe?id=12345");
IE6和IE7都会将文件下载为“文件”(没有扩展名),但Firefox,Opera,Google Chrome和Safari都没有任何问题将文件下载为“file.exe”。
知道IE6 / 7的问题是什么以及如何解决这个问题?
答案 0 :(得分:2)
您是否尝试在响应标头中设置正确的内容类型?例如:
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="file.exe"
答案 1 :(得分:0)
您可能需要远程获取文件大小并将其添加到标题部分的Content-Length。
答案 2 :(得分:0)
如果您使用fiddler2(http://www.fiddler2.com/fiddler2/),您可以确切地看到哪些标头被发送到IE,这可能有助于您进行调试。
也许您可以在此处发布结果标题?
我怀疑在重定向之前添加Content-Type和Content-Disposition会产生任何影响,因为浏览器会看到重定向标头并向重定向的url发出一个全新的http请求,这将是一个完全不同的集合标题。
但是,您可以尝试使用Server.Transfer作为服务器端重定向,如下所示:
Response.Clear(); //In case your .aspx page has already written some html content
Response.AddHeader("Content-Type", "application/octet-stream");
string disp = String.Format("attachment; filename={0}", fileName); // fileName = file.exe
Response.AddHeader("Content-Disposition", disp);
Server.Transfer(@"http://www.example.com/file.exe?id=12345");
或者,使用Response.BinaryWrite:
Response.Clear(); //In case your .aspx page has already written some html content
byte[] exeContent = ... //read the content of the .exe into a byte[]
Response.AddHeader("Content-Type", "application/octet-stream");
string disp = String.Format("attachment; filename={0}", fileName); // fileName = file.exe
Response.AddHeader("Content-Disposition", disp);
Response.BinaryWrite(exeContent);