下载功能-页面 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("下载附件失败"); } } }