Hi Mikael, did you ever resolve this?
-Noah
On Fri, Feb 6, 2015 at 12:14 PM, Mikael Ståldal <
mikael.staldal_at_appearnetworks.com> wrote:
> I am implementing a server with Jersey which have an endpoint receiving a
> multipart/form-data entity with two parts. The first part is a short
> string, and the second part is a possibly large zip file.
>
> I need to extract some entries from the zip file (using java.util.zip
> stuff), and then store the whole zip file on disk. I do not want to buffer
> the whole zip file in memory.
>
> How can I do that in an efficient way?
>
> My current implementation uses jersey-media-multipart and do like below.
> However, it seems like the implementation uses it's own temporary files
> (named MIME*.tmp), so it seems redundant that I also create a temp file.
> Can I get access to the implementation temp file somehow?
>
> And it seems like the implementation's temp file is not properly cleaned
> up if the file upload is cancelled in the middle.
>
> @Consumes({MediaType.MULTIPART_FORM_DATA})
> @POST
> public void endpoint(@FormDataParam("name") String name,
> @FormDataParam("file") InputStream file) throws
> IOException {
>
> File tempFile = File.createTempFile("file", null);
> try {
> org.apache.commons.io.FileUtils.copyInputStreamToFile(file,
> tempFile);
>
> ZipFile zipFile = new ZipFile(tempFile);
> // extract some entries from the ZipFile here
> zipFile.close();
>
> Path destinationPath = calcPath(name);
> Files.move(tempFile.toPath(), destinationPath,
> StandardCopyOption.REPLACE_EXISTING);
> } finally {
> tempFile.delete();
> }
> }
>
>
> --
> Mikael Ståldal
> Chief Software Architect
> *Appear*
> Phone: +46 8 545 91 572
> Email: mikael.staldal_at_appearnetworks.com
>