文件下载没有临时文件的Java

时间:2017-02-02 15:41:26

标签: java rest file download

我正在尝试创建一个文件并作为响应发送,以便可以下载该文件。我不知道该怎么做。我目前的代码

  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" ...在浏览器中提到此路径后,我会选择下载文件。

我想要达到的目标是: 我想创建一个文件(但不要在我的系统上创建任何临时文件)并作为响应发送。浏览器应该收到一个提示,询问是否下载该文件作为响应。 有人可以指导我做错了吗?

1 个答案:

答案 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。没有创建临时文件。

希望它有所帮助。

谢谢!