在Rest API中,如何下载文件以及UI的另一个Response对象

时间:2018-08-20 10:57:45

标签: spring rest file download

我在Spring中有一个现有的Rest API,该API返回响应。我要为此添加文件下载。正确的做法是什么?

这就是我现在得到的:

@CrossOrigin
@ResponseStatus(HttpStatus.OK)
@PostMapping(value = "/program/{programId}/reportType/{reportType}", consumes = "application/json")
public ApiResponse<Object> executeReport(@PathVariable("programId") String programId,
        @PathVariable("reportType") String reportType, @RequestBody ReportDTO reportDTO, HttpServletResponse response) {
    List<Map<String, Object>> report = reportBuilderService.generateReportFromReportDTO(reportDTO);

    try {
        getDownload(reportType, report, response);
    } catch (IOException e) {
        e.printStackTrace();
    }

    return new ApiResponse<>(APIResponseKey.ALL_GOOD, report, null);
}

//My new function for the file download part.
public void getDownload(String reportType, List<Map<String, Object>> report, HttpServletResponse response)
        throws IOException {
    byte[] reportContents = service.writeFile(reportType, report).getBytes();

    response.addHeader("Content-Disposition", "attachment; filename=" + reportType + ".csv");
    response.setContentType("text/csv; charset=UTF-8");
    response.setContentLength(reportContents.length);

    ServletOutputStream out = response.getOutputStream();
    out.write(reportContents);
}
  1. 在Postman中进行“发送并下载”时,如何在相同的响应中同时实现这两项?
  2. “另存为”对话框将文件名显示为response.csv,即使我在邮递员的响应标头中看到了Content-Disposition,也没有设置我提供的文件名。
  3. 如何在浏览器中没有“另存为”对话框的情况下直接下载?

0 个答案:

没有答案