Wie Sie ein PNG-Bild von der Jersey REST-Service-Methode an den Browser zurückgeben
Ich habe einen Webserver laufen mit dem Jersey-REST-Ressourcen, und ich Frage mich, wie man ein Bild/png-Referenz für die Browser img-tag; nachdem Sie ein Formular ausgefüllt oder ein Ajax-response. Die Bildverarbeitungs-code für das hinzufügen von Grafiken arbeitet, müssen nur zurückkehren es irgendwie.
Code:
@POST
@Path("{fullsize}")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("image/png")
//Would need to replace void
public void getFullImage(@FormDataParam("photo") InputStream imageIS,
@FormDataParam("submit") String extra) {
BufferedImage image = ImageIO.read(imageIS);
//.... image processing
//.... image processing
return ImageIO. .. ?
}
Cheers
InformationsquelleAutor der Frage gorn | 2012-02-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin nicht davon überzeugt, es ist eine gute Idee, um die Rückkehr-Bild-Daten in einem REST-Dienst. Es knüpft Ihre Anwendung server-Speicher-und IO-Bandbreite. Viel besser delegieren diese Aufgabe an einen richtigen web-server, der optimiert ist für diese Art von transfer. Sie können dies durch das senden einer Weiterleitung an die Bild-Ressource (wie eine HTTP 302-Antwort mit der URI des Bildes). Dies wird vorausgesetzt natürlich, dass Ihre Bilder angeordnet sind, wie web-Inhalte.
Gesagt haben, dass, wenn Sie sich entscheiden, Sie wirklich brauchen, um die übertragung von Bild-Daten von einem web-service können Sie dies mit der folgenden (pseudo -) code:
Add exception-handling, etc etc.
InformationsquelleAutor der Antwort Perception
Baute ich eine Allgemeine Methode für die, die mit folgenden features:
Hier der code:
Beachten Sie, dass die Locale-Wechsel scheint nicht thread-safe. Ich denke, es ist besser, Sie wechseln die locale Global. Ich bin nicht sicher über die Nebenwirkungen, aber...
InformationsquelleAutor der Antwort koppor
bezüglich der Antwort von @Wahrnehmung, seine wahre sehr Speicher in Anspruch, wenn arbeiten mit byte-arrays, aber Sie könnte auch einfach zurück schreiben in den Ausgabestrom
InformationsquelleAutor der Antwort comeGetSome
Wenn Sie eine Reihe von Bild-Ressource-Methoden, es lohnt sich, die Schaffung eines MessageBodyWriter für die Ausgabe der BufferedImage:
Diese MessageBodyWriter, wird automatisch verwendet, wenn die automatische Erkennung aktiviert ist, für das Trikot, sonst wird es zurückgegeben werden muss, die von einer benutzerdefinierten Anwendung, die sub-Klasse. Sehen JAX-RS Entity-Provider für mehr info.
Sobald dies eingerichtet ist, einfach wieder ein BufferedImage aus einer Ressource-Methode, und es wird die Ausgabe als Bild Datei Daten:
Ein paar der Vorteile dieses Ansatzes:
InformationsquelleAutor der Antwort Justin Emery