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

 

       

        使用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 οnlοad="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>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lishengbo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值