使用Java Jersey返回一个文件

时间:2010-10-10 14:07:54

标签: java jersey

我正在使用Java Jersey来实现REST服务。 我的服务应该提供的一件事是文件下载选项。 这些文件非常大,并且是根据db。

中的数据构建的

目前,我从数据库中获取所有数据并将其保存到文件中 并返回

Response.ok().entity(new FileInputStream(file)).build();

有没有办法在不完全从db下载数据的情况下开始提供文件,但是数据来自db会将其附加到输出流吗?

4 个答案:

答案 0 :(得分:8)

使用Input and Output binary streams using JERSEY?

的答案解决了问题

答案 1 :(得分:7)

怎么样

File fileToSend = getFile();
return Response.ok(fileToSend, "application/zip").build();

可以将媒体类型设置为与正在发送的文件匹配。

这看起来非常简单,但更重要的是,阅读此内容的java专家是否会看到解决方案的性能问题?

答案 2 :(得分:0)

所以你想从你的数据库中获取一个流?

我不确定它是否可能。

但您不必编写临时文件来发送数据。您可以使用ByteArrayInputStream而不是写入文件,并使用字节数组放置数据。

答案 3 :(得分:0)

取决于底层数据库连接/驱动程序的类型,如果您有权访问JDBC层(例如使用Hibernate),则应该可以使用JDBC Streaming API流式传输数据,然后从ResultSet中获取Streams并传递它们进入泽西岛的Response Builder。 我自己没有这样做..

点击此处: