Как отправить изображение в качестве ответа при загрузке Spring? - PullRequest
0 голосов
/ 10 июля 2020

Я новичок с весенней загрузкой (restController) и angular Я хочу отправить изображение своему клиенту (angular) с помощью этого метода:

@RestController public class ProductRestController { 
    @Autowired private ProductRepository pr;
    @GetMapping (path = "/ photoProduit / {id}", produces = org.springframework.http.MediaType.IMAGE_PNG_VALUE)
     public byte [] getPhoto (@PathVariable Long id) throws IOException { 
        Product p = pr.findById (id) .get (); return Files.readAllBytes (Paths.get (System.getProperty ("user.home") + "/ ecom / produits /" + p.getPhotoName ()));
        
    }
 }

Но URL-адрес возвращает мне код 500 с этой ошибкой

There was an unexpected error 
(type = Internal Server Error, status = 500). C: \ Users \ Gonan \ ecom \ products \ unknow.png java.nio.file.NoSuchFileException: C: \ Users \ Gonan \ ecom \ produits \ unknow.png

Не могли бы вы мне помочь, пожалуйста ??

1 Ответ

0 голосов
/ 11 июля 2020

Согласно опубликованному вами исключению, похоже, что путь к изображению, который вы пытаетесь прочитать, не найден.

Также есть несколько исправлений в методе, вот как я это сделал:

import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;

@GetMapping(value = "/image", produces = MediaType.IMAGE_JPEG_VALUE)
    public ResponseEntity<Resource> image() throws IOException {
        final ByteArrayResource inputStream = new ByteArrayResource(Files.readAllBytes(Paths.get(
                "/home/silentsudo/Videos/dum111111b.jpg"
        )));
        return ResponseEntity
                .status(HttpStatus.OK)
                .contentLength(inputStream.contentLength())
                .body(inputStream);

    }

Убедитесь, что URI для Paths.get(...) действителен, иначе вы все равно получите java.nio.file.NoSuchFileException

...