我正在尝试从aspx页面向Firefox提供exe服务器。 aspx页面处理标题,页面由我们的Flex GUI启动。 Flex正确启动所有浏览器(包括Firefox)的链接,所以我确定这不是问题。
我遇到的问题是当我尝试从Firefox中下载文件时,FF下载文件很好,但它将其命名为“内容”。它没有扩展名,文件名不正确。所有其他浏览器都使用我在aspx页面中指定的文件名下载它们,并且它们都具有.exe扩展名。我应该注意,如果我将“Content”文件重命名为“Content.exe”,它会正确运行。
以下是我在aspx页面中使用的代码 -
protected void Page_Load(object sender, EventArgs e) {
string fileName = Request.QueryString["file"];
System.IO.FileInfo fileInfo = new System.IO.FileInfo(Server.MapPath(fileName));
Response.Clear();
if ( fileName.EndsWith(".exe") ) {
Response.ContentType = "application/exe";
}
else {
Response.ContentType = "application/octet-stream";
}
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name);
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.WriteFile(fileInfo.FullName);
Response.Flush();
}
有关为什么在Firefox中无法正常运行的任何想法和/或建议?
答案 0 :(得分:3)
我刚刚在一个简单的asp.net网站上运行了你提到的没有Flex GUI部分的确切代码,并且它在我的Firefox上工作正常,我得到了带扩展名的文件名。
我使用的是Firefox 3.6.16。
您可以尝试以下几种方法:
还有一点,可能这只是出于测试目的,因为允许以这种方式下载文件可能是一种安全威胁,因为即使从Flex GUI调用url,人们也可以使用fiddler或wireshark来监控流量,然后利用它来下载他们想要的任何文件。例如,他们可以下载web.config并查看连接字符串,或者他们可以下载代码。
您应该限制用户仅从一个位置下载文件,并且只允许少数允许的扩展名。
答案 1 :(得分:0)
您无需自己添加内容长度,因为Response.WriteFile
会在适当的时候执行此操作。生成的重复标头不正确。
我也会在最后避免冲洗,首先只有在长时间下载中部分发生时,冲洗才有用;只有在最后你才能得到分块编码的缺点,没有任何优点。这也可能会干扰您发送的内容长度标题。
最后,没有注册的内容类型“application / exe”,“application / octet-stream”应该用于可执行文件。也许因为Firefox认为它对.exe文件来说是“错误的”,所以它没有使用那个扩展名。
如果上述方法都不能解决问题,我建议您使用通过Fiddler或类似工具查看的浏览器发送的标题更新您的问题,因为这可能有助于有人找到答案(或者您自己就此而言)。