java web通过js下载多个文件文件到客户端指定目录

5 篇文章 0 订阅
4 篇文章 0 订阅

前端代码

/**
     * 通过ajax下载文件
     *
     * @param {string} fileUrl 文件远程地址
     * @param {string} filePath 文件本地路径
     * @returns
     */

    function downloadFileByAjax(fileUrl, filePath,index) {
        if(index == null || index == undefined){
            index = 0;
        }
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open('GET', fileUrl+"?index="+index, true);
        xmlHttp.onreadystatechange = function (){
            if (xmlHttp.readyState === 4) {
                var fileName = decodeURI(xmlHttp.getResponseHeader("fileName"));
                var tempIndex = xmlHttp.getResponseHeader("index");
                console.log("fileName:"+fileName);
                console.log("tempIndex:"+tempIndex);
                if (xmlHttp.status < 300 && xmlHttp.status >= 200) {
                    if(tempIndex == null || tempIndex == undefined ){
                        if (index > 0){
                            alert("下载成功!")
                        }
                        return false;
                    }
                    saveStreamToFile(xmlHttp.responseBody, filePath+fileName);
                    downloadFileByAjax(fileUrl,filePath,tempIndex);
                } else {
                    alert("下载失败!");
                }
            }
        };
        xmlHttp.send();
    }

    /**
     * 保存二进制数据到文件
     *
     * @export
     * @param {*} stream
     * @param {string} filePath
     */
    function saveStreamToFile(stream, filePath) {
        saveContentToFile(stream, filePath, '1');
    }

    function saveContentToFile(content,filePath,type) {
        var adodbstream = new ActiveXObject('ADODB.Stream');
        adodbstream.Mode = '3';
        adodbstream.Type = type;
        adodbstream.Open();
        if (type === '1') {
            adodbstream.Write(content);
        } else {
            adodbstream.WriteText(content);
        }
        var fn1 = 'SaveTo';
        var fn2 = 'File';
        adodbstream[fn1+fn2](filePath, 2);
        adodbstream.Close();
    }

后台代码

	@ResponseBody
	@RequestMapping(value = "/testDownloadByJS", method = RequestMethod.GET)
	public void testDownloadByJS(HttpServletRequest request,HttpServletResponse response){
		try{
			String i = request.getParameter("index") == null ? "" : request.getParameter("index");
			if (StringUtil.isBlank(i) ){
				return ;
			}
			int index = Integer.parseInt(i);
			File file = new File("\\opt\\temp\\aaa.doc");
			File file1 = new File("\\opt\\temp\\bbb.doc");
			File file2 = new File("\\opt\\temp\\ccc.doc");

			List<File> fileList = new ArrayList<>();
			fileList.add(file);
			fileList.add(file1);
			fileList.add(file2);
			if (index > fileList.size()-1){
				return ;
			}

			BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileList.get(index)));
			response.reset();
			response.setContentType("application/vnd.ms-excel;charset=UTF-8");
			response.setHeader("fileName", URLEncoder.encode(fileList.get(index).getName(), "UTF-8"));
			response.setHeader("index",index+1+"");
			ServletOutputStream outputStream = response.getOutputStream();
			BufferedOutputStream bos = new BufferedOutputStream(outputStream);
			int len = 0;
			byte[] buf = new byte[10 * 1024];
			while( (len=bis.read(buf, 0, buf.length)) != -1){
				bos.write(buf, 0, len);
			}
			bis.close();
			bos.flush();
			bos.close();
		}catch (Exception e){
			log.error(e.getMessage(),e);
			log.warn(e.getMessage());
		}
	}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值