用ActiveXObject可实现从客户端本地上传文件到服务器端的功能

本文介绍了一个使用JavaScript和Java实现文件从服务器下载到客户端,并上传至另一服务器端的具体示例。JavaScript部分通过ActiveX对象读取服务器上的文件,并发送至目标服务器;Java后端接收上传的数据流并保存到指定位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、javascript代码如下,filePath为服务器路径:

function sendFileToServer(filePath){
    var stream =newActiveXObject("ADODB.Stream");
    stream.Type=1; 
    stream.Open(); 
    stream.Position = 0;
    stream.LoadFromFile(filePath) //可以读取服务器端文件,并下载到本地指定路径
    stream.Position = 0;
    sendByteStreamToServer(stream,appRoot+"/uploadServlet?cmd=upload&filePath="+filePath);
    stream.Close();
}


//辅助JS函数:将服务器端文件下载到客户端本地
var dbfdata;
function sendByteStreamToServer(stream,url){
if (window.XMLHttpRequest) {
   xmlhttp = newXMLHttpRequest();
   if(xmlhttp.overrideMimeType) {
      xmlhttp.overrideMimeType("text/xml")
   }
} else if (window.ActiveXObject) {
   var activexName =["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
   for (var i = 0; i< activexName.length; i++) {
      try {
          xmlhttp =new ActiveXObject(activexName[i]);
         break;
      } catch(e) {
         e.print();
      }
   }
}
xmlhttp.onreadystatechange = callback_upload;
xmlhttp.open("post", url, false);
boundary="abcd"
xmlhttp.setRequestHeader("Content-Type", "multipart/form-data,boundary="+boundary);
   xmlhttp.setRequestHeader("Content-Length", stream.Size);
xmlhttp.send(stream);
}

//得到数据
function callback_upload() {
if (xmlhttp.readyState == 4) {
    if (xmlhttp.status ==200) {
       var responseText = xmlhttp.responseText;
       dbfdata =responseText;
    } else
    {
       alert("系统错误");
    }
}
}

2、JAVA后台代码:把文件读到本地

String cmd = request.getParameter("cmd");
OutputStream ou = (OutputStream)response.getOutputStream();
if ("upload".equalsIgnoreCase(cmd)) {
String filePath = newString(request.getParameter("filePath").getBytes("iso8859-1"),"GBK");
String fileName =filePath.substring(filePath.lastIndexOf("\\") + 1);
String loadPath =Constant.ROOTPATH  +"upload_files" +                   System.getProperties().getProperty("file.separator"); //上传文件存放目录
InputStream in = request.getInputStream();
BufferedInputStream bis = new BufferedInputStream(in);
StringtempPath=(String)request.getSession().getAttribute("tempPath");
if(tempPath==null||tempPath.equalsIgnoreCase("")){
tempPath=UUID.randomUUID().toString();
request.getSession().setAttribute("tempPath", tempPath);
}
loadPath=loadPath+tempPath+System.getProperties().getProperty("file.separator");
File newFile = new File(loadPath);
if (!newFile.exists())
newFile.mkdirs();
BufferedOutputStream bos = new BufferedOutputStream(newFileOutputStream(new File(loadPath + fileName.toLowerCase())));//获得文件输出流
int b = 0;
while ((b = bis.read()) != -1) {
bos.write(b);
}
in.close();
bis.close();
bos.close();
ou.write(tempPath.getBytes());
ou.close();
新颖网络上传插件(StorageWebPlug)是一个支持超大文件(2GB,可扩展)上传的COM控件, 具备断点续传,文件MD5验证,大大提高上传效率、节省带宽,有详细的上传进度显示,支持多种脚本语言,欢迎下载体验。免费提供JavaScript SDK包。 产品特点: 1、文件上传使用增强的FTP协议,用户使用浏览器就可以上传超大文件到服务器(支持上传超过1G的文件)。 2、支持断点续传,系统智能续传未上传文件,续传操作更简单,更方便,更快捷。 3、支持文件批量上传, 一次可以上传多个文件. 上传时有详细的状态显示(包括单个文件进度,整体进度,传输速率,剩余时间等)。 4、新颖网络免费提供JavaScript SDK包。通过新颖网络提供的封装好的JavaScript类库用户可以快速的与现有系统整合。 5、StorageWebPlug提供完善的接口和帮助文档,开发文档。开发人员可以动态设置上传保存路径, 设置允许扩展名, 允许最大大小等,可自定义强。 6、支持各种代理(HTTP, Socket4, Socket5等)。 7、组件采用多线程机制来保证上传效率。 8、支持批量文件上传, 用户可以一次性上传批量文件. 客户端可以绑定HTML表单变量, 服务端并可以接收表单变量 9、服务端文件保存路径可以随意指定,服务端文件保存路径可以灵活变化。保存路径支持网络路径。 10、为提高安全性,服务端组件可以指定用户权限 11、可以限制上传单个文件大小, 控制上传带宽上限, 允许文件扩展名, 拒绝文件扩展名等 12、上传数据时会根据网络状况来控制数据包大小, 避免网络堵塞 13、控件采用ATL编写, cab包只有59KB, 用56k的modem下载不会超过12秒 14、服务端支持Windows 2000 Server/Windows 2003 Server/Windows NT/Windows XP/Unix/Linux等操作系统 15、通过新颖网络业界领先的设计水平打造的操作界面可以帮助您的系统和产品获得更高的品质。 产品介绍:http://www.ncmem.com/service_storagewebplug.aspx 下载地址:http://www.ncmem.com/download.aspx
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值