我有一个用例,在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());