java实现文件导出,一般是get请求。但是有可能会有特殊情况必须用post请求方式实现。
    比如我实际中遇到的情况:前端需要向后端传输图片。并在导出的文档中解析出来。只能使用post请求。
    实现方法:

    1. @ApiOperation(value = "导出评估报告", notes = "导出评估报告")
    2. @RequestMapping(value = "/exportRiskReport", method = RequestMethod.POST)
    3. public void exportRiskReport(@RequestBody ExportReportDto exportReportDto, HttpServletRequest request, HttpServletResponse response) {
    4. try {
    5. String templetKeyId = exportReportDto.getTempletKeyId();
    6. String institutionRiskKey = exportReportDto.getInstitutionRiskKey();
    7. String taskNo = exportReportDto.getTaskNo();
    8. List<Map<String,Object>> imgList = exportReportDto.getMapActions();
    9. inherentRiskAssessMentService.exportRiskReport(templetKeyId, institutionRiskKey, taskNo,imgList, request, response);
    10. } catch (Exception e) {
    11. logger.error("Exception{}", e);
    12. e.printStackTrace();
    13. }
    14. return;
    15. }

    实际导出的方法,根据正常需要编写即可。
    前端:

    1. /**
    2. * 创建blob对象,并利用浏览器打开url进行下载
    3. * @param data 文件流数据
    4. */
    5. downloadFile(data) {
    6. // 下载类型 xls
    7. const contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
    8. // 下载类型:csv
    9. const contentType2 = 'text/csv';
    10. const blob = new Blob([data], { type: contentType });
    11. const url = window.URL.createObjectURL(blob);
    12. // 打开新窗口方式进行下载
    13. // window.open(url);
    14. // 以动态创建a标签进行下载
    15. const a = document.createElement('a');
    16. const fileName = this.datePipe.transform(new Date(), 'yyyyMMdd');
    17. a.href = url;
    18. // a.download = fileName;
    19. a.download = fileName + '.xlsx';
    20. a.click();
    21. window.URL.revokeObjectURL(url);
    22. }