Saya mendapatkan data gambar (as byte[]
) dari DB. Bagaimana cara mengembalikan gambar ini @ResponseBody
?
EDIT
Saya melakukannya tanpa @ResponseBody
menggunakan HttpServletResponse
parameter metode:
@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());
}
Menggunakan @ResponseBody
dengan org.springframework.http.converter.ByteArrayHttpMessageConverter
konverter terdaftar seperti yang dikatakan @id tidak bekerja untuk saya :(.
@ResponseBody
@RequestMapping("/photo2")
public byte[] testphoto() throws IOException {
InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
return IOUtils.toByteArray(in);
}
sumber
Selain mendaftar
ByteArrayHttpMessageConverter
, Anda mungkin ingin menggunakanResponseEntity
bukan@ResponseBody
. Kode berikut ini berfungsi untuk saya:sumber
Dengan menggunakan Spring 3.1.x dan 3.2.x, ini adalah bagaimana Anda harus melakukannya:
Metode pengontrol:
Dan anotasi mvc dalam file servlet-context.xml:
sumber
Selain beberapa jawaban di sini, beberapa petunjuk (Musim Semi 4.1).
Jika Anda tidak memiliki messageconverters yang dikonfigurasi di WebMvcConfig Anda, memiliki
ResponseEntity
di dalam@ResponseBody
pekerjaan Anda dengan baik.Jika Anda melakukannya, yaitu Anda telah
MappingJackson2HttpMessageConverter
mengkonfigurasi (seperti saya) menggunakanResponseEntity
pengembalian aorg.springframework.http.converter.HttpMessageNotWritableException
.Satu-satunya solusi yang berfungsi dalam hal ini adalah untuk membungkus
byte[]
dalam@ResponseBody
sebagai berikut:Dalam hal ini lakukan rememeber untuk mengkonfigurasi messageconverters dengan benar (dan tambahkan a
ByteArrayHttpMessageConverer
) di WebMvcConfig Anda, seperti:sumber
Dalam konteks aplikasi Anda, nyatakan AnnotationMethodHandlerAdapter dan daftarkanByteArrayHttpMessageConverter:
juga dalam metode penanganan mengatur jenis konten yang sesuai untuk respons Anda.
sumber
Bekerja untukku.
sumber
Saya lebih suka yang ini:
Ubah jenis media menjadi format gambar apa pun yang Anda miliki.
sumber
ResourceLoader
, tetapi membuat nama path dari input eksternal seperti pada contoh Anda adalah ide yang buruk: cwe.mitre.org/data/definitions/22.htmlIni bekerja untuk saya di Spring 4.
sumber
Tidak ada jawaban yang bekerja untuk saya, jadi saya berhasil melakukannya seperti itu:
Pengaturan
Content-Disposition
tajuk Saya dapat mengunduh file dengan@ResponseBody
anotasi pada metode saya.sumber
Anda harus menentukan jenis media dalam respons. Saya menggunakan anotasi @GetMapping dengan menghasilkan = MediaType.IMAGE_JPEG_VALUE. @RequestMapping akan berfungsi sama.
Tanpa jenis media, sulit untuk menebak apa yang dikembalikan (termasuk siapa saja yang membaca kode, peramban, dan tentu saja Spring itu sendiri). Byte [] tidak spesifik. Satu-satunya cara untuk menentukan jenis media dari byte [] adalah mengendus dan menebak-nebak.
Menyediakan jenis media adalah praktik terbaik
sumber
Ini adalah bagaimana saya melakukannya dengan Boot Musim Semi dan Jambu Biji:
sumber
Pada musim semi 4 sangat mudah Anda tidak perlu melakukan perubahan pada kacang. Tandai saja tipe pengembalian Anda ke @ResponseBody.
Contoh:-
sumber
Saya pikir Anda mungkin perlu layanan untuk menyimpan unggahan file dan mendapatkan file itu. Lihat lebih detail dari sini
1) Buat Layanan Penyimpanan
2) Buat Rest Controller untuk mengunggah dan mendapatkan file
}
sumber