下载功能-vue

下载功能-页面
fileDownload(info){
	let fileName = info['bankFileName'];
	let filePath = info['bankFile'];
	let postData = {'fileName':fileName,'filePath':filePath};
	this.downloadData(this.fileDownloadUrl, postData).then(data => {
	    if (data.size === 0) {
	        this.msgError('文件下载出错');
	    } else {
	        const blob = new Blob([data]);
	        const elink = document.createElement('a');
	        elink.download = fileName;
	        elink.style.display = 'none';
	        elink.href = URL.createObjectURL(blob);
	        document.body.appendChild(elink);
	        elink.click();
	        URL.revokeObjectURL(elink.href); // 释放URL 对象
	        document.body.removeChild(elink);
	        this.msgSuccess('文件下载成功');
	    }
	});
}

  

下载功能-后端
@RequestMapping(value = "/downLoadFileTest", method = RequestMethod.POST)
public void downLoadFileTest(HttpServletRequest request, HttpServletResponse response) {
    ResultEntity re = new ResultEntity();
    String fileName = request.getParameter("fileName");
    String filePath = request.getParameter("filePath");
    logger.info("fileName = "+fileName);
    logger.info("filePath = "+filePath);
    if (StrKit.isBlank(fileName) || StrKit.isBlank(filePath)) {
        logger.error("下载文件出错");
        return;
    }
    InputStream input = null;
    OutputStream os = null;
    try {
        logger.info("下载开始");
        String downLoadFilePath = filePath;
        File downLoadFile = new File(downLoadFilePath);
        //读取流
        input = new BufferedInputStream(new FileInputStream(downLoadFilePath));
        if (input == null) {
            logger.error("下载附件失败,请检查文件“" + downLoadFilePath + "”是否存在");
            return;
        }
        byte[] buffer = new byte[input.available()];
        input.read(buffer);
        input.close();
        // 清空response
        response.reset();
        // 重要,设置response的Header
        response.setHeader("Content-Disposition", "attachment;filename=\"" + new String(fileName.getBytes())+"\"");
        response.setHeader("Content-Length", "" + downLoadFile.length());
        //octet-stream是二进制流传输,当不知文件类型时都可以用此属性
        response.setContentType("application/octet-stream");
        //跨域请求,*代表允许全部类型
        response.setHeader("Access-Control-Allow-Origin", "*");
        //允许请求方式
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        //用来指定本次预检请求的有效期,单位为秒,在此期间不用发出另一条预检请求
        response.setHeader("Access-Control-Max-Age", "600");
        //请求包含的字段内容,如有多个可用哪个逗号分隔如下
        response.setHeader("Access-Control-Allow-Headers", "content-type,x-requested-with,Authorization, x-ui-request,lang");
        //访问控制允许凭据,true为允许
        response.setHeader("Access-Control-Allow-Credentials", "true");
        //创建一个输出流,用于输出文件
        OutputStream oStream = new BufferedOutputStream(response.getOutputStream());
        //写入输出文件
        oStream .write(buffer);
        oStream .flush();
        oStream .close();
        logger.info("下载文件=" + fileName +"成功");
    } catch (Exception e) {
        logger.error("下载文件出错:" + e.getMessage(), e);
    } finally {
        try {
            if (input != null) {
                input.close();
            }
        } catch (IOException e) {
            logger.error("下载附件失败");
        }
        try {
            if (os != null) {
                os.close();
            }
        } catch (IOException e) {
            logger.error("下载附件失败");
        }
    }
}

  

 

posted @ 2021-01-06 16:00  internHe  阅读(184)  评论(0编辑  收藏  举报