Spring 构建 CSV 字符串并下载一个文件



我想要的是当我访问/getcsv下载csv file

@RequestMapping(value = "/getcsv", method = RequestMethod.GET)
public void getCSV(HttpServletResponse response){
    String csv = "a,b";
    response.setContentType("text/csv");
    //what to do now?
}

我不知道如何引发包含我的字符串的csv file的下载。

您可以在 outputStream of Response 中写入数据。

    @RequestMapping(value = "/getcsv", method = RequestMethod.GET)
    public void getCSV(HttpServletResponse response){
        String csv = "a,b";
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "fileName.csv");
        response.setHeader("Access-Control-Expose-Headers","Authorization, Content-Disposition");
        try (PrintWriter pw = new PrintWriter(response.getOutputStream())) {
            pw.write(csv);
        }
    }

您可以尝试以下代码。

@PostMapping(value = "/getcsv", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
  public ResponseEntity<?> downloadFile(@RequestParam("fileName") String fileName) {
    String dirPath = "E:/some-directory-path/";
    byte[] fileBytes = null;
    try {
      fileBytes = Files.readAllBytes(Paths.get(dirPath + fileName));
    } catch (IOException e) {
      e.printStackTrace();
    }
    return ResponseEntity.ok()
        .contentType(MediaType.APPLICATION_OCTET_STREAM)
        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename="" + fileName + """)
        .body(fileBytes);
  }

您必须设置为应用程序八进制流才能下载任何文件。

相关内容

最新更新