如何解决下载文件时文件名过长被截断的问题?
宏羽 2007-05-08 11:59:34 各位网友:
最近在用Asp.Net写一个文件下载程序。遇到了一个棘手的问题。客户要求下载后的文件名全部是中文名,这个我已解决,但出现了新的问题。就是当文件名过长(大概是编码后文件名长度不能超过255个字符)时,系统将自动截断文件名的前面一部分。这样下载后的文件名很难被用户理解,不符合他们的要求。请问如何解决这个问题?
我的代码(Asp.Net)如下:
public void DownLoadFiles(string fullName,string SaveAsFileName)
{
//fullName是文件在服务器上的实际物理路径
//SaveAsFileName是另存为的文件名,就是保存到客户端的文件名
if (fullName == "")
return;
string path = Server.MapPath("../" + fullName);
System.IO.FileInfo file = new System.IO.FileInfo(path);
string Ext=fullName.Substring(fullName.LastIndexOf("."));
Response.Clear();
Response.ContentType = "text/plain";
Response.ContentType = "application/octet-stream";
if (SaveAsFileName.Length > 22) //没办法,现在只能将文件名中超过的
SaveAsFileName = SaveAsFileName.Substring(0, 22);//部分手工截去
string filename = System.Web.HttpUtility.UrlEncode(SaveAsFileName, System.Text.Encoding.UTF8);
Response.AddHeader("Content-Disposition", "attachment; filename=" + filename + Ext);
Response.Charset = "GB2312";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
try
{
Response.AddHeader("Content-Length", file.Length.ToString());
}
catch (System.IO.FileNotFoundException e)
{
System.Diagnostics.Debug.Write(e.Message);
}
Response.ContentType = "application/octet-stream";
try
{
Response.WriteFile(file.FullName);
}
catch (System.IO.FileNotFoundException e)
{
System.Diagnostics.Debug.Write(e.Message);
}
catch (System.IO.DirectoryNotFoundException e)
{
System.Diagnostics.Debug.Write(e.Message);
}
Response.End();
}