簡體   English   中英

使用Java Jersey返回一個文件

[英]Return a file using Java Jersey

我正在使用Java Jersey來實現REST服務。 我的服務應該提供的一件事是文件下載選項。 這些文件非常大,並且是根據db的數據構建的。

目前我從數據庫中獲取所有數據並將其保存到文件並返回

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

有沒有辦法如何在沒有從db完全下載數據的情況下開始提供文件,但是數據來自db會將其附加到輸出流?

使用JERSEY使用輸入和輸出二進制流的答案解決了這個問題

怎么樣

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

可以將媒體類型設置為與正在發送的文件匹配。

這看起來非常簡單,但更重要的是,閱讀此內容的java專家是否會看到解決方案的性能問題?

所以你想從你的數據庫中獲取一個流?

我不確定它是否可能。

但是您不必編寫臨時文件來發送數據。 您可以使用ByteArrayInputStream並將數據放在一個字節數組中,而不是寫入文件。

取決於底層數據庫連接/驅動程序的類型,如果您有權訪問JDBC層(例如使用Hibernate),則應該可以使用JDBC Streaming API流式傳輸數據,然后從ResultSet中獲取Streams並將它們傳遞給Jersey的Response生成器。 我自己沒有這樣做..

點擊這里:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM