我创建了一个下载图片的代码。如果文件名没有特殊字符或标点符号,它可以正常工作。但是当文件名包含其他语言的字符或文件名中的“,”时,我发现了一个问题。
我的代码是:
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中下载的,但没有扩展名。即文件下载,完成后,如果我添加扩展名到该文件,它工作正常。
我该怎么做才能解决这个问题?
答案 0 :(得分:0)
真诚的,我不懂ASP。 但似乎你在文件名中允许使用空格。您应该避免使用它,因为某些浏览器会强制对文件名进行URL编码,将%20替换为空格并弄乱文件路径。 此外,在某些语言(PHP)中,文件名中的空格在某些情况下可以强制MIME类型为text / html。
出于多种原因,您应该避免文件中的空格被下载或仅在网络中使用。