通过Rest下载CSV文件

Spr*_*ing 5 java csv rest opencsv

使用OpenCSV,我可以在光盘上成功创建一个CSV文件,但我真正需要的是允许用户使用下载按钮下载CSV,我不需要保存在磁盘上,只需下载即可.有任何想法吗?

@GET
@Path("/downloadCsv")
public Object downloadCsv() {
        CSVWriter writer;
        FileWriter wr; 
      //Or should I use outputstream here?   
        wr= new FileWriter("MyFile.csv");
        writer = new CSVWriter(wr,',');
        for (Asset elem: assets) {
            writer.writeNext(elem.toStringArray());
        }
        writer.close();


}
Run Code Online (Sandbox Code Playgroud)

编辑:我不想在光盘上保存/读取文件EVER

tom*_*tom 14

要强制"另存为",您需要在响应中设置内容处置HTTP标头.它应该如下所示:

Content-Disposition: attachment; filename="whatever.csv"
Run Code Online (Sandbox Code Playgroud)

看起来你正在使用JAX-RS.此问题显示如何设置标头.您可以将CSV写入HTTP响应流并在其中设置标头或返回如下Response对象:

return Response.ok(myCsvText).header("Content-Disposition", "attachment; filename=" + fileName).build();
Run Code Online (Sandbox Code Playgroud)

您不需要File在此过程的中间写入对象,因此可以避免写入磁盘.

  • 我已经更新了我的答案。一种简单的方法是从 CSVWriter 中取出字符串。我使用 JacksonCSV 而不是 OpenCSV,但我想这很容易。例如,您可以使用 StringWriter 而不是 FileWriter。 (2认同)