关于Servlet:使用Open CSV从ServletOutputStream发送文件

Using Open CSV to Send files from ServletOutputStream

我已经解析了一个使用POST发送到我的TOMCAT服务器的JSON对象,并将其转换为CSV文件。我想将CSV文件发送回用户。我对如何发回文件感到困惑,因为我看到的所有示例都引用了存储在服务器上的实际文件-我的文件内置于内存中,并且据我所知实际上并未引用文件/文件描述符告诉。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//The doPost method has already generated the String[] - I then call generateCSV


protected void generateCSV(ArrayList<String[]> data, ServletOutputStream out,
                           HttpServletResponse response)
{
    try{
        BufferedWriter buff = new BufferedWriter(new OutputStreamWriter(out));
        CSVWriter writer = new CSVWriter(buff);
            writer.writeAll(data);
            writer.close();

        sendFile(response, out);

    }catch(IOException | ServletException e){

        e.printStackTrace();
    }


}


protected void sendFile(HttpServletResponse response, ServletOutputStream outstream)throws ServletException, IOException
{
    response.setContentType("application/octet-stream");
    outstream.flush();
    outstream.close();
}

从servlet向用户发送文件需要做什么?

  • 设置内容类型。
  • 写出字节。
  • 在我看来您正在执行此操作,但是顺序错误。另外,您可能不希望使用application / octet-stream来告诉浏览器这是CSV。您可能还想给它一个文件名。

    1
    2
    3
    4
    5
    6
        response.setContentType("text/csv");
        response.setHeader("Content-Disposition","filename=whatever.csv");
        BufferedWriter buff = new BufferedWriter(new OutputStreamWriter(out));
        CSVWriter writer = new CSVWriter(buff);
            writer.writeAll(data);
            writer.close();