通过休息下载CSV文件



使用 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();

}

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

要强制"另存为",您需要在响应中设置内容处置 HTTP 标头。 它应该看起来像这样:

Content-Disposition: attachment; filename="whatever.csv"

看起来您正在使用 JAX-RS。 此问题显示如何设置标头。 您可以将 CSV 写入 HTTP 响应流并在那里设置标头,也可以返回一个Response对象,如下所示:

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

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

首先,你的代码不能被编译,对吧?方法 downloadCsv() 声明返回类型 Object,但不返回任何内容。

我将声明更改为String downloadCsv()并将 CSV 的内容作为字符串返回。为此,请使用StringWriter而不是FileWriter,然后说return wr.toString()

这里唯一缺少的是内容类型。您将方法注释为 @Produces({"text/csv"})

我想,就是这样。

            response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".csv");
            response.setContentType("text/csv");
            OutputStreamWriter osw = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
            List<String[]> result = iSmsExportService.csvExport(columnNames);
            CSVWriter csvWriter = new CSVWriter(osw, ';');
            csvWriter.writeAll(result);
            csvWriter.flush();
            csvWriter.close();

在此之后,已开始下载CSV文件。

相关内容

  • 没有找到相关文章

最新更新