I Jersey bin mit (org.glassfish.jersey - Version 2.22.2) - JAX-RS, Guice und implementierende Methode für das Hochladen von Bildern:REST-Methode für Bild Hochladen und Speichern - Inputverarbeitung Bildformat jpg, png
@PUT
@Path("/image")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public ImageResponse putImage(@FormDataParam("image") InputStream uploadedInputStream) {
writeToFileWithOutputStream(uploadedInputStream);
return null;
}
private void writeToFileWithOutputStream(InputStream uploadedInputStream) {
try {
OutputStream out = new FileOutputStream(new File("xxx.jpg"));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Wenn ich schreibe, um Datei mit Methode writeToFileWithOutputStream zu schreiben, bekomme ich Datei, die nicht als Bild geöffnet wird. Es besteht:
------WebKitFormBoundary5PVRYeRUBBAFA9yi
Content-Disposition: form-data; name="image"; filename="images.jpg"
Content-Type: image/jpeg
/** image symbols **/
------WebKitFormBoundary5PVRYeRUBBAFA9yi
Content-Disposition: form-data; name=""
------WebKitFormBoundary5PVRYeRUBBAFA9yi--
Wenn ich die oberen 4 Zeilen manuell lösche, wird das Bild ordnungsgemäß geöffnet.
Ich habe versucht, sie mit BufferedReader/Writer zu verarbeiten, aber es ist falsch formatiert wegen Corrupted files uploaded on REST method call
Auch versucht ImageIO.read (input) zu verwenden, aber es gibt null zurück.
Was ist der beste Weg, empfangenes Bild InputStream zu verarbeiten und speichern Sie es als Bild (jpg, PNG oder anderes Format)?
Sorry, es war mein Fehler. Ich habe das Problem bei der Verwendung von InputStream. @FormDataParam ("image") FormDataContentDisposition fileDetail - Wenn ich FormDataContentDisposition nicht als Parameter verwende, fügt es InputStream zusätzliche Daten hinzu? Verarbeiten Sie InputStream vor dem Speichern als Bild? – Justas
ok, die Frage ist aktualisiert und ich habe die Antwort aktualisiert. – jeorfevre
Danke. Ich hatte bereits eine Jersey-Media-Multipart-Abhängigkeit verwendet. Ich kann nicht den zweiten @FormDataParam ("image") FormDataContentDisposition Parameter hinzufügen, weil ich com.sun.jersey.spi.inject.Errors $ ErrorMessagesException bekomme. Es beschrieben http://stackoverflow.com/questions/37179249/com-sun-jersey-spi-inject-errorerrormessageexception-severe-missing-depend – Justas