从aspx向Firefox提供exe。 Firefox将其下载为“内容”。文件名不正确,没有扩展名

时间:2011-03-28 11:37:54

标签: c# .net asp.net firefox

我正在尝试从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中无法正常运行的任何想法和/或建议?

2 个答案:

答案 0 :(得分:3)

我刚刚在一个简单的asp.net网站上运行了你提到的没有Flex GUI部分的确切代码,并且它在我的Firefox上工作正常,我得到了带扩展名的文件名。

我使用的是Firefox 3.6.16。

您可以尝试以下几种方法:

  1. 尝试在没有Flex GUI部分的情况下运行相同的代码
  2. 如果仍然无效,请检查您的Firefox版本
  3. 根据Jon的建议,使用Fiddler并观察响应标头中是否有错误
  4. 还有一点,可能这只是出于测试目的,因为允许以这种方式下载文件可能是一种安全威胁,因为即使从Flex GUI调用url,人们也可以使用fiddler或wireshark来监控流量,然后利用它来下载他们想要的任何文件。例如,他们可以下载web.config并查看连接字符串,或者他们可以下载代码。

    您应该限制用户仅从一个位置下载文件,并且只允许少数允许的扩展名。

答案 1 :(得分:0)

您无需自己添加内容长度,因为Response.WriteFile会在适当的时候执行此操作。生成的重复标​​头不正确。

我也会在最后避免冲洗,首先只有在长时间下载中部分发生时,冲洗才有用;只有在最后你才能得到分块编码的缺点,没有任何优点。这也可能会干扰您发送的内容长度标题。

最后,没有注册的内容类型“application / exe”,“application / octet-stream”应该用于可执行文件。也许因为Firefox认为它对.exe文件来说是“错误的”,所以它没有使用那个扩展名。

如果上述方法都不能解决问题,我建议您使用通过Fiddler或类似工具查看的浏览器发送的标题更新您的问题,因为这可能有助于有人找到答案(或者您自己就此而言)。