问题
I am trying to download a SWF file using Jersey from a web resource.
I have written the following code, but am unable to save the file properly :
Response response = webResource.request(MediaType.APPLICATION_OCTET_STREAM)
.cookie(cookie)
.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));
String binarySWF = response.readEntity(String.class);
byte[] SWFByteArray = binarySWF.getBytes();
FileOutputStream fos = new FileOutputStream(new File("myfile.swf"));
fos.write(SWFByteArray);
fos.flush();
fos.close();
It is save to assume that the response does return a SWF file, as response.getMediaType returns application/x-shockwave-flash.
However when I try to open the SWF, nothing happen (also no error) which suggest that my file was not created from response.
回答1:
From Java 7 on, you can also make use of the new NIO API to write the input stream to a file:
InputStream is = response.readEntity(InputStream.class)
Files.copy(is, Paths.get(...));
回答2:
I've finally got it to work.
I figured out reading the Jersey API that I could directly use getEntity to retrieve the InputStream of the response (assuming it has not been read yet).
Using getEntity to retrieve the InputStream and IOUtils#toByteArray which create a byte array from an InputStream, I managed to get it to work :
Response response = webResource.request(MediaType.APPLICATION_OCTET_STREAM)
.cookie(cookie)
.post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE));
InputStream input = (InputStream)response.getEntity();
byte[] SWFByteArray = IOUtils.toByteArray(input);
FileOutputStream fos = new FileOutputStream(new File("myfile.swf"));
fos.write(SWFByteArray);
fos.flush();
fos.close();
Note that IOUtils is a common Apache function.
回答3:
I think you should not go through a String at all.
If the response is really the SWF file (binary data), then here:
String binarySWF = response.readEntity(String.class);
instead of this code (which reads a String), just try reading
a byte array. See if it helps. Strings are related to encodings
and probably that messes things up.
来源:https://stackoverflow.com/questions/20336235/how-to-save-a-file-from-jersey-response