Ich erhalte Bilddaten (as byte[]
) von der DB. Wie kann ich dieses Bild zurückgeben @ResponseBody
?
BEARBEITEN
Ich habe es ohne @ResponseBody
Verwendung HttpServletResponse
als Methodenparameter:
@RequestMapping("/photo1")
public void photo(HttpServletResponse response) throws IOException {
response.setContentType("image/jpeg");
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
IOUtils.copy(in, response.getOutputStream());
}
Die Verwendung @ResponseBody
mit einem registrierten org.springframework.http.converter.ByteArrayHttpMessageConverter
Konverter, wie @Sid sagte, funktioniert bei mir nicht :(.
@ResponseBody
@RequestMapping("/photo2")
public byte[] testphoto() throws IOException {
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
return IOUtils.toByteArray(in);
}
quelle
Zusätzlich zur Registrierung von a
ByteArrayHttpMessageConverter
möchten Sie möglicherweise aResponseEntity
anstelle von verwenden@ResponseBody
. Der folgende Code funktioniert für mich:quelle
Mit Spring 3.1.x und 3.2.x sollten Sie Folgendes tun:
Die Controller-Methode:
Und die mvc-Annotation in der Datei servlet-context.xml:
quelle
Neben ein paar Antworten hier ein paar Hinweise (Spring 4.1).
Incase Sie haben noch keine messageconverters in Ihrem WebMvcConfig konfiguriert, mit
ResponseEntity
in Ihrem@ResponseBody
gut funktioniert.Wenn Sie dies tun, dh Sie haben eine
MappingJackson2HttpMessageConverter
(wie ich) mit denResponseEntity
Rückgaben a konfiguriertorg.springframework.http.converter.HttpMessageNotWritableException
.Die einzige funktionierende Lösung ist in diesem Fall eine wickeln
byte[]
in der@ResponseBody
wie folgt:Denken Sie in diesem Fall daran, die Nachrichtenkonverter ordnungsgemäß
ByteArrayHttpMessageConverer
in Ihrer WebMvcConfig zu konfigurieren (und ein a hinzuzufügen ).quelle
Deklarieren Sie in Ihrem Anwendungskontext einen AnnotationMethodHandlerAdapter und einen registerByteArrayHttpMessageConverter:
Stellen Sie auch in der Handler-Methode den entsprechenden Inhaltstyp für Ihre Antwort ein.
quelle
Arbeitete für mich.
quelle
Ich bevorzuge diesen:
Ändern Sie den Medientyp in ein beliebiges Bildformat.
quelle
ResourceLoader
, aber das ErstellenEs ist Arbeit für mich im Frühjahr 4.
quelle
Keine der Antworten hat bei mir funktioniert, also habe ich es so gemacht:
Einstellen
Content-Disposition
Header konnte ich die Datei mit der zum Download@ResponseBody
Anmerkung auf meiner Methode.quelle
So mache ich es mit Spring Boot und Guava:
quelle
Sie sollten den Medientyp in der Antwort angeben. Ich verwende eine @ GetMapping-Annotation mit generate = MediaType.IMAGE_JPEG_VALUE. @RequestMapping funktioniert genauso.
Ohne einen Medientyp ist es schwer zu erraten, was tatsächlich zurückgegeben wird (einschließlich aller Personen, die den Code, den Browser und natürlich Spring selbst lesen). Ein Byte [] ist einfach nicht spezifisch. Die einzige Möglichkeit, den Medientyp aus einem Byte [] zu bestimmen, besteht darin, herumzuschnüffeln und zu raten.
Die Bereitstellung eines Medientyps ist nur eine bewährte Methode
quelle
Im Frühjahr 4 ist es sehr einfach, dass Sie keine Änderungen an den Bohnen vornehmen müssen. Markieren Sie Ihren Rückgabetyp nur für @ResponseBody.
Beispiel:-
quelle
Ich denke, Sie brauchen vielleicht einen Dienst, um das Hochladen von Dateien zu speichern und diese Datei zu erhalten. Überprüfen Sie mehr Details von hier
1) Erstellen Sie einen Speicherservice
2) Erstellen Sie einen Rest Controller zum Hochladen und Abrufen der Datei
}}
quelle