我已经解析了一个使用POST发送到我Tomcat服务器的JSON对象,并将其转换为CSV文件。我想向用户发送CSV文件。我很困惑如何发送文件回来,因为我看到的所有示例引用了存储在服务器上的实际文件 - 我的文件是内存中内存的,并且实际上并没有引用文件/文件描述符,尽我所能告诉。

//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向用户发送文件?

  1. 设置内容类型。
  2. 写出字节。
  3. 在我看来你正在这样做,但顺序错误。此外,而不是使用您可能希望实际告诉浏览器的应用程序/八位字节流这是CSV。您可能还想给它一个文件名。

        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();
    
    .

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top