【发布时间】:2014-07-18 19:11:13
【问题描述】:
我创建了一个用于下载图像的代码。如果文件名没有特殊字符或标点符号,它可以正常工作。但是当文件名中包含其他语言的字符或“,”时,我发现了一个问题。
我的代码是:
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äbace 11,5 hm”和“Png 文件”。我可以在 Chrome 中下载这些文件,但无法在 IE 和 Firefox 中下载。还有一件事,该文件是在 Firefox 中下载的,但没有扩展名。即文件被下载,完成后,如果我向该文件添加扩展名,它工作正常。
我应该怎么做才能解决这个问题?
【问题讨论】: