文件下载,中文文件名过长被IE截取,如何解决啊

guangliangnet 2009-12-28 09:45:51
文件下载,中文文件名过长被IE截取,如何解决啊,麻烦各位帮忙解决一下,谢谢
...全文
388 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishengbo 2011-12-05
  • 打赏
  • 举报
回复
使用DownloadXPro控件,我正好也碰到这个问题,代码如下
:<script type="text/javascript" language="javascript">
function download()
{

//实例化控件
var dwX = new ActiveXObject("DownloadXPro.DownloadX.1.6");
//临时SESSION
DownloadX.DownloadSessionTempSubfolder = "session-4639E7BD-47A7-4303-A522-759EA100A4CF";
//取出参数
var params=getUrlParam(window.location.href);
//取出IP地址
var ip=getUrlIPAndPort(window.location.href);
//文件名
var fileName=params["fileName1"];
//下载时显示的文件名
var code=params["code"];
//解码
code=decodeURIComponent(code);

var json={
id:params['id'],
fileName1:params['fileName1']
};
//从FTP服务器下载文件到应用服务器目录
$(function(){
$.post(params['contextPath']+"/core/upload/downloadfile.action",json,function(){
});
});
var nFileId = DownloadX.AddFile("http://"+ip+params['contextPath']+"/uploads/item/"+fileName,
"-1",
code,
"\\"+code,
1,
"",
"",
"",
0);

//下载文件
var b=DownloadX.Download();
//文件没有被下载,则关闭下载窗口
if(b==false)
{
window.close();
}
}

/**
* 得到URL参数
*
* @param {}
* name URL
* @return {} 参数
*/
function getUrlParam(name) {
var urlParamsArray = {};
var index = name.indexOf("?");
if (index == -1) {
return undefined;
} else {
var urlRight = name.substring(index + 1, name.length);
var arrayParams = urlRight.split("&");
for (var i = 0; i < arrayParams.length; i++) {
var arrayParam = arrayParams[i].split("=");
urlParamsArray[arrayParam[0]] = arrayParam[1];
}
}
return urlParamsArray;
}
/**
* 得到IP地址
**/
function getUrlIPAndPort(name)
{
if(name!=undefined)
{
var url=name.split("/");
if(url!=undefined)
return url[2];
else
return null;

}else
{
return null;
}
}

</script>
</head>
<body onload="download()">
<object id="DownloadX" width="600" height="400"
classid="clsid:D1A7314E-03BD-40e0-BA6A-F37AB575FECF"
codebase="DownloadXPro.cab#Version=1,6,5,0"> </object>
<script type="text/javascript" language="javascript">
//文件下载完毕时,关闭窗口
function DownloadX::OnDownloadComplete(result)
{
alert("文件下载完成");
window.close();

}
</script>
</body>
wuyq11 2009-12-28
  • 打赏
  • 举报
回复
这是由于内容部署标头用于文件流是大于大约 150 字节, 拉丁字符集是等于 150 个字符。 如果是使用非拉丁字符集, 例如日语或俄语格式化内容部署标头可能会发生此行为。
if (fullFileName.Length > 150)
{
byte[] bs = System.Text.Encoding.UTF8.GetBytes(fullFileName);
fullFileName = System.Text.Encoding.Default.GetString(bs);

}
http://support.microsoft.com/default.aspx?scid=kb%3Bzh-cn%3B820129
Adechen 2009-12-28
  • 打赏
  • 举报
回复
将中文编码下试下,暂时不清楚有啥办法
QingT26 2009-12-28
  • 打赏
  • 举报
回复
直接问下微软不就知道了,呵呵!
vip__888 2009-12-28
  • 打赏
  • 举报
回复
没办法....
cuike519 2009-12-28
  • 打赏
  • 举报
回复
这个真的没有。。。
guangliangnet 2009-12-28
  • 打赏
  • 举报
回复
客户要求要全名
silentwins 2009-12-28
  • 打赏
  • 举报
回复
整短
dahaidao 2009-12-28
  • 打赏
  • 举报
回复
要真的是很长的文件名,可能没有办法解决的吧。
guangliangnet 2009-12-28
  • 打赏
  • 举报
回复
System.IO.FileInfo toDownload = new System.IO.FileInfo(outfile);
Response.Clear();


Response.AddHeader("Content-Disposition", "attachment;filename=" +System.Web.HttpUtility.UrlEncode(toDownload.Name,Encoding.UTF8));
Response.ContentType = "application/octet-stream";
Response.Charset = "utf8";
Response.TransmitFile(outfile);
Response.End();
Lovely_baby 2009-12-28
  • 打赏
  • 举报
回复
我也看看~~
mngzilin 2009-12-28
  • 打赏
  • 举报
回复
代码
十八道胡同 2009-12-28
  • 打赏
  • 举报
回复
IE这么搞的,我们怎么办。。。
等答案
guangliangnet 2009-12-28
  • 打赏
  • 举报
回复
那是文件名全称,必须显示全名,客户要求
hitlcyu19 2009-12-28
  • 打赏
  • 举报
回复
貌似没有办法吧 弄短点吧
mngzilin 2009-12-28
  • 打赏
  • 举报
回复
无奈
  • 打赏
  • 举报
回复
^:^
symbol_bc 2009-12-28
  • 打赏
  • 举报
回复
这个没办法,get方式传址url的最长是有限制的,好像是2000多字节,再长了就自动截取了,这种方式要使用post传递,否则。。。呵呵

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧