下载不适用于firefox和IE的文件代码

时间:2014-07-18 10:52:35

标签: asp.net download

我创建了一个下载图片的代码。如果文件名没有特殊字符或标点符号,它可以正常工作。但是当文件名包含其他语言的字符或文件名中的“,”时,我发现了一个问题。

我的代码是:

private void AddFile(SPFile file)
{
    try
    {
        System.IO.FileInfo fileInfo = new FileInfo(file.Name);
        string filename = GeneralMethods.MakeValidFileName(file.Name);
        filename += fileInfo.Extension;
        byte[] obj = (byte[])file.OpenBinary();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AppendHeader("Content-Disposition", "attachment; filename= " + filename);
        Response.ContentType = "application/octet-stream";
        if (Response.IsClientConnected)
            Response.BinaryWrite(obj);
        Response.Flush();
        Response.Close();


    }
    catch (Exception ex)
    {           
    }
    finally
    {

    }
}

为避免文件名中的其他语言字符和其他标点符号,我创建了一种方法将非英文字符替换为空白。

    public static string MakeValidFileName(string name)
    {
        Regex rgx = new Regex("[^a-zA-Z0-9 -]");
        return rgx.Replace(name, "");
    } 

在我的场景中,我有两个文件'xäbace11,5hm'& 'Png文件'。我可以在Chrome中下载这些文件但无法在IE和IE中下载Firefox浏览器。还有一件事,该文件是在Firefox中下载的,但没有扩展名。即文件下载,完成后,如果我添加扩展名到该文件,它工作正常。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:0)

真诚的,我不懂ASP。 但似乎你在文件名中允许使用空格。您应该避免使用它,因为某些浏览器会强制对文件名进行URL编码,将%20替换为空格并弄乱文件路径。 此外,在某些语言(PHP)中,文件名中的空格在某些情况下可以强制MIME类型为text / html。

出于多种原因,您应该避免文件中的空格被下载或仅在网络中使用。