上传没问下,下载的时候中文名太长被截取,截取时第一个字符可能是乱码,如:“深圳市政府关于十一放假安排文件.doc”下载文件名为“bb圳市政府关于十一放假安排文件.doc”。
下载代码如下:
Response.Clear();
Response.Buffer = false; //设置缓冲输出为false
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(sFileName, Encoding.UTF8));
Response.AppendHeader("Content-Length", sFileSize);
Response.WriteFile(sFilePath);                
               

解决方案 »

  1.   

    原因
    这是由于内容部署标头用于文件流是大于大约 150 字节, 拉丁字符集是等于 150 个字符。 如果是使用非拉丁字符集, 例如日语或俄语格式化内容部署标头可能会发生此行为。因为 UTF-8 编码方案使用 9 字节来表示单个日语字符, 但使用拉丁字符集中仅 1 字节例如, 17 个字符内容部署标头日语字符集中是 153 字节。 参见http://support.microsoft.com/default.aspx?kbid=816868解决方案:
                        if (fullFileName.Length > 150)
                        {
                            byte[] bs = System.Text.Encoding.UTF8.GetBytes(fullFileName);
                            fullFileName = System.Text.Encoding.Default.GetString(bs);                    }