如果在写入 HTTP 后设置了 "Content-type" 和"content-disposition",则在浏览器中打印 HTTP 响应"response"输出流



我有一个用例,在http响应输出流中写入后,我必须设置"Content-type"one_answers"content-disposition",而不是作为文件下载。下面的示例代码描述了这种情况:-

@Context
HttpServletResponse response;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String downloadFile() throws IOException {
    File file = new File("/var/tmp/input.txt");
    FileInputStream fs = new FileInputStream(file);
    copyStream(fs, response.getOutputStream());
    response.setContentType("text/csv");
    response.setHeader("Content-Disposition","attachment;filename="" + "ts.csv" + """);
    return "";
}

当我输入一个小文件(input.txt文件)时,我的浏览器给我一个下载的选项,但当输入很大时,它直接在浏览器选项卡中打印文件内容。

任何指针我能做什么,这样它提供了一个文件下载选项的大输入以及?

根据ServletResponse的文档。setContentType :

如果响应尚未提交,则设置发送到客户端的响应的内容类型。

并且,根据ServletResponse的文档。getWriter:

返回一个printwwriter对象,该对象可以向客户端发送字符文本。

在您的编码中,您在设置content-type之前将内容写入response对象。

您不应该写入响应输出流,以使您的自定义内容类型工作。

修改代码:

copyStream(fs, response.getOutputStream());
response.setContentType( "text/csv" );
response.setHeader( "Content-Disposition",
                    "attachment;filename="" + "ts.csv" + """ );

:

response.setContentType( "text/csv" );
response.setHeader( "Content-Disposition",
                    "attachment;filename="" + "ts.csv" + """ );
copyStream(fs, response.getOutputStream());

相关内容

  • 没有找到相关文章

最新更新