我正在尝试创建一个文件并作为响应发送,以便可以下载该文件。我不知道该怎么做。我目前的代码
String fileName = "fileToBeSaved.csv";
File file = new File(fileName);
FileWriter writer = new FileWriter(file);
writer.append(data);
writer.flush();
writer.close();
Response.ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition","attachment; filename=\"fileName.csv\"");
return response.build();
此代码在我的系统上创建一个临时文件。当浏览器收到响应时,它会获得文件路径,例如" C:/ folderName / FileName" ...在浏览器中提到此路径后,我会选择下载文件。
我想要达到的目标是: 我想创建一个文件(但不要在我的系统上创建任何临时文件)并作为响应发送。浏览器应该收到一个提示,询问是否下载该文件作为响应。 有人可以指导我做错了吗?
答案 0 :(得分:0)
我终于找到了方法。
Response.ResponseBuilder response = Response.ok();
response.header("Content-Disposition", "attachment; filename=\"filename.csv\"");
response.entity(contentAsString);
return response.build();
如果你不能从文件的内容中构建一个字符串,那么解决方法就是:
ByteArrayOutputStream bo = new ByteArrayOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(bo));
//for loop can be any content.. I am just showing a represenatation.
for (int i = 0; i < content.size(); i++) {
writer.write(content.get(i));
}
writer.flush();
Response.ResponseBuilder response = Response.ok();
response.type(MediaType.APPLICATION_OCTET_STREAM);
response.header("Content-Disposition", "attachment");
response.entity(bo.toByteArray());
return response.build();
在上面的代码中,我正在构建一个文件并发送到GUI。没有创建临时文件。
希望它有所帮助。
谢谢!