如图,在浏览器中实现以下的下载方式
注意点:
1,下载文件存在于web服务器上本地上;
2,前端页面用form形式请求。
html:
js:
/** * * 开始下载 * ctx 对应路径 */function downloadDebitPost(){ var debitDate=$('#debitDate').val(); if (debitDate==""||debitDate==null) { $.messager.alert("系统提示", "请完整输入日期"); return; } $("#itemForm_payreslut_charge").attr("action", ctx + '/downloadDebit'); $('#itemForm_payreslut_charge').submit();}
java:
@RequestMapping("/downloadDebit")public void downloadDebit(HttpServletRequest request,HttpServletResponse response,@RequestParam MapreqParams) { String debitDate = (String) reqParams.get("debitDate"); debitDate=debitDate.replaceAll("-", ""); try { String fileName = "202210000000000001214_" + debitDate + ".txt";//文件名 String path = "D:/file/opbill/" + fileName;//绝对路径 FileUploadUtil.downLoadByFilePath(request, response,path); } catch (BusinessException e) { //LOGGER.error("导出账单出错:", e); } catch (IOException e) { //LOGGER.error("导出账单出错:", e); e.printStackTrace(); }}
public class FileUploadUtil { /** * 按文件源路径下载文件 * @param request * @param response * @param path */ public static void downLoadByFilePath(HttpServletRequest request, HttpServletResponse response, String path) { BufferedInputStream bis = null; BufferedOutputStream bos = null; try { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("UTF-8"); File file = new File(path); if(!file.exists()){ log.info("文件路径:"+path); throw new BusinessException("下载文件路径不存在["+path+"]"); } long fileLength = file.length(); // 编码处理 String fileName = path.substring(path.lastIndexOf("/") + 1); fileName = encodeFileName(request, fileName); response.setContentType("application/x-msdownload;"); response.setHeader("Content-disposition", "attachment; filename=" + fileName); response.setHeader("Content-Length", String.valueOf(fileLength)); bis = new BufferedInputStream(new FileInputStream(path)); bos = new BufferedOutputStream(response.getOutputStream()); byte[] buff = new byte[2048]; int bytesRead; while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) { bos.write(buff, 0, bytesRead); } } catch (IOException e) { // 此异常为下载中出现的异常,不影响下载功能,可捕获但无需抛出 } catch (Exception e) { log.error("下载出现异常:", e); } finally { try { if (bis != null) { bis.close(); } if (bos != null) { bos.close(); } } catch (IOException e) { e.printStackTrace(); } } }}