JaxRSを使用してサーバーからzipファイルを作成して返したい。サーバー上に実際のファイルを作成したいとは思いません。可能であれば、zipをその場で作成し、それをクライアントに返したいと思います。その場で巨大なzipファイルを作成した場合、zipファイルに含まれるファイルが多すぎると、メモリが不足しますか?
また、これを行うための最も効率的な方法がわかりません。これが私が考えていたものですが、Javaでの入出力に関しては非常に錆びています。
public Response getFiles() {
// These are the files to include in the ZIP file
String[] filenames = // ... bunch of filenames
byte[] buf = new byte[1024];
try {
// Create the ZIP file
ByteArrayOutputStream baos= new ByteArrayOutputStream();
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(baos));
// Compress the files
for (String filename : filenames) {
FileInputStream in = new FileInputStream(filename);
// Add ZIP entry to output stream.
out.putNextEntry(new ZipEntry(filename));
// Transfer bytes from the file to the ZIP file
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
// Complete the entry
out.closeEntry();
in.close();
}
// Complete the ZIP file
out.close();
ResponseBuilder response = Response.ok(out); // Not a 100% sure this will work
response.type(MediaType.APPLICATION_OCTET_STREAM);
response.header("Content-Disposition", "attachment; filename=\"files.zip\"");
return response.build();
} catch (IOException e) {
}
}
どんな助けでも大歓迎です。