当前位置: 首页 > 知识库问答 >
问题:

如何使用带内容的spring boot controller下载csv文件?

濮阳旭东
2023-03-14

我在下载csv文件时遇到了这个问题。我在Spring boot中创建了get api,并想通过该api下载文件。这是我的代码。

@GetMapping(value = "/citydetails/download")
public ResponseEntity<Object> getCityDetails() throws IOException {
    System.out.println("Starting the rest call.");
    FileWriter filewriter = null;
    service = new LocalityService();
    try {
        List<CityDetails> details = service.getCityDetailsList();
        if (details.isEmpty()) {
            System.out.println("List is empty.");
        }
        StringBuilder fileContent = new StringBuilder("STATE,DISTRICT,CITY,VILLAGE,PIN\n");
        for (CityDetails data : details)
            fileContent.append(data.getStatename()).append(data.getDistrict()).append(data.getCity())
                    .append(data.getVillage()).append(data.getPindode());

        XSSFWorkbook workbook = service.saveFileContents(details);
        String filename = "C:\\Users\\" + System.getProperty("user.name") + "\\Downloads\\cityDetails.csv";
        FileOutputStream out = new FileOutputStream(filename);
        File file = new File("cityDetails.csv");
        workbook.write(out);
        out = new FileOutputStream(file);


        return ResponseEntity.ok()
                .contentType(MediaType.parseMediaType("text/csv"))
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + "cityDetails.csv" + "\"")
                .body(file);
    } catch (Exception ex) {
        System.out.println("Failed to execute rest" + ex.getStackTrace() + "Locale: " + ex.getLocalizedMessage());
        ErrorDetails errorDetails = new ErrorDetails(new Date(), ex.getMessage(), "false");
        return new ResponseEntity<>(errorDetails, HttpStatus.INTERNAL_SERVER_ERROR);
    } finally {
        if (filewriter != null)
            filewriter.close();
    }
}

在这里,我使用XSSFWorkbook将我的内容保存到csv。现在我想通过Rest api下载csv文件,该api将包含数据。我尝试了多种方法,但我得到了空文件。使用上述代码,它会将csv文件保存在windows机器的下载文件夹中,但我希望此api能在每个系统上运行,因此我想下载包含内容的csv文件,而不是将其保存到特定位置。我面临的问题,如何解决?

共有2个答案

程俊誉
2023-03-14
//image
@GetMapping(value = "/image")
public @ResponseBody byte[] getImage() throws IOException {
    InputStream in = getClass()
      .getResourceAsStream("/com/baeldung/produceimage/image.jpg");
    return IOUtils.toByteArray(in);
}


//normal file
@GetMapping(
  value = "/get-file",
  produces = MediaType.APPLICATION_OCTET_STREAM_VALUE
)
public @ResponseBody byte[] getFile() throws IOException {
    InputStream in = getClass()
      .getResourceAsStream("/com/baeldung/produceimage/data.txt");
    return IOUtils.toByteArray(in);
}

邬良才
2023-03-14
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet=wkb.createSheet("sheet1");
HSSFRow row1=sheet.createRow(0);
HSSFCell cell=row1.createCell(0);
cell.setCellValue("table_demo");
sheet.addMergedRegion(new CellRangeAddress(0,0,0,3));

//input Excel date
HSSFRow row2=sheet.createRow(1);    
row2.createCell(0).setCellValue("name");
row2.createCell(1).setCellValue("class");    
row2.createCell(2).setCellValue("score_1");
row2.createCell(3).setCellValue("score_2");    
HSSFRow row3=sheet.createRow(2);
row3.createCell(0).setCellValue("Jeams");
row3.createCell(1).setCellValue("High 3");
row3.createCell(2).setCellValue(87);    
row3.createCell(3).setCellValue(78);    

//output Excel file
OutputStream output=response.getOutputStream();
response.reset();
response.setHeader("Content-disposition", "attachment; filename=details.xls");
response.setContentType("application/msexcel");        
wkb.write(output);
output.close();

这段代码可以得到一个简单的excel文件

 类似资料:
  • 问题内容: 我正在尝试为我的网站完成一个相当简单的任务,但是我不确定该如何去做。我希望用户查看表格,然后单击一个按钮,此时用户可以保存该表的内容作为csv文件。此请求有时可能非常复杂,因此我生成了一个进度页来提醒用户。 除了实际生成csv文件之外,我已经弄清了大多数东西。(我使用jQuery和PHP) jQuery代码在单击时运行: 相关的PHP: 这样做是将文本作为PHP文件发送,但不会生成下载

  • 问题内容: 我正在尝试从node.js服务器流式传输文件。服务器部分非常简单: 在我的角度控制器中,我正在尝试做这样的事情 在我看来,单击按钮时会调用此函数: 我查看了有关从Angular服务器中下载文件的其他答案,但没有找到适合我的方法。有一种常见的方法吗?看起来应该很简单。 问题答案: 服务返回一个具有两个回调方法的,如下所示。

  • 运行上述代码后出现以下错误。请帮忙做这件事。。正在将源和目标文件名作为S3属性中的参数传递。。。 在处理上述异常时,发生了另一个异常: 回溯(最后一次调用):文件“C:\Cloudtail\CT\SQL Scripts\python\GRN\u S3\u dwnld.py”,第17行,除了botocore.exception.ClientErrors as e:NameError:未定义名称“bo

  • 我创建了一个测试计划 我已经通过执行所需的步骤/过程保存了测试计划,即使用一个用户下载不同的文档。记录的脚本有1个用户,而我正在使用jmeter-n-t d:\jmeter\downloadfinal21sept.jmx-l d:\jmeter\reportlog\result21septpdfinal.csv-e-o d:\jmeter\htmlreport\report21septpdfina

  • 可从PlayStation®Store购买游戏、下载游戏最新的免费体验版或宣传影片。 若要使用(PS Store),需先注册PlayStation®Network账号。即使未使用PS Vita注册PlayStation®Network也可阅览PlayStation®Store。下载内容时需先注册,请遵循显示的画面注册。 PlayStation®Network和PlayStation®Store的提

  • 在我的应用程序中,我从一个API响应接收一个文件,该响应的是。 我试图返回这个文件到前端作为