我有一个用例,我必须设置" Content-type"和"内容 - 处置"在http响应输出流中写入而不是作为文件下载。以下示例代码描述了案例: -
@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文件)时,我的浏览器可以选择下载它,但是当输入很大时,它会直接在浏览器选项卡中打印文件内容。
我可以做什么指针,以便为大输入提供文件downoad选项?
答案 0 :(得分:1)
根据ServletResponse.setContentType的文件:
如果尚未提交响应,则设置发送给客户端的响应的内容类型。
并且,根据ServletResponse.getWriter的文档:
返回可将字符文本发送到客户端的PrintWriter对象。
在您的编码中,您在设置response
之前将内容写入content-type
对象。
您应该没有写入响应输出流,以使您的自定义内容类型有效。
更改您的代码:
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());