您的位置:首页 > 其它

使用DownloadXPro控件解决IE长文件名下载BUG

2011-12-05 17:16 337 查看
使用IE下载文件时,如果文件名过长,则文件名会被载断。具体表现为使用UTF-8编码时,不能超过17个汉字,有网友使用ISO-8859-1编码,但也只能支持153个个字符,并没有从根本上解决这个问题,比较好的解决方案是自己编写ActiveX控件,在本地保存时使用长文件名。但是需要对VB或者C++比较悉,正好我两者都不太熟,于是,我谷歌 一下,当然一下是谷不出来的,我至少谷了N次,终于找到一个免费的ActiveX下载控件,名曰:downloadXPro,好吧,下面我们看看这个控件都有哪些功能吧。

1、DownloadXPro是一个ActiveX控件;(我承认这是一句废话)

2、可以使用VB.NET,C#,C+ +,VB,Delphi中,ASP,ASP.NET,PHP,JAVA这些语言进行编程,也就是提供了API接口撒,说白了就是COM组件,至于各种语言怎么调用DownloadXPro,作为JAVA程序员,我没法给大家一个交待;

3、DownloadXPro从Internet下载文件(这是必须的),支持所有的网络协议(HTTP, HTTPS, FTP and Secure FTP/FTPS和代理服务器);

4、为了提高下载速度,将文件分了若干段,并且使用单独的线程;

5、支持断点继传(这个功能我还没用过,不做任何的保证);

6、控件可以到我的空间下载;

7、没了......

功能介绍完了,接下来看看实际的例子,免得被网友们说成纸上谈兵。



<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="webwork" prefix="ww"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>下载文件</title>
<script type="text/javascript"
src='<ww:url value="/Highcharts2.1/jquery-1.4.2.min.js"/>'></script>

<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>
</html>




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: