Je crée une nouvelle application Spring Boot et je veux pouvoir stocker et servir des images, je veux que les images soient stockées dans le répertoire des applications:
entrez la description de l'image ici

Voici à quoi ressemble le téléchargement pour le moment:

@PostMapping("/")
@ResponseBody
public String upload(@RequestPart String title, @RequestPart MultipartFile img) throws IOException{
    String imgName = img.getOriginalFilename();
    Post p = new Post();
    p.setTitle(title);
    p.setImageName(imgName);
    postService.add(p);
    File upl = new File("images/" + imgName);
    upl.createNewFile();
    FileOutputStream fout = new FileOutputStream(upl);
    fout.write(img.getBytes());
    fout.close();
    return "ok";
}

C'est comme ça que je veux obtenir des images

<img th:src="@{'images/' + ${post.imageName}}"/>

Pour l'instant j'obtiens 404 et quand je veux voir des images dans le répertoire j'obtiens

Fatal error reading PNG image file: Not a PNG file

Comment dois-je le faire pour que cela fonctionne?

9
Weras Adve 12 août 2017 à 17:00

2 réponses

Vous pouvez stocker des fichiers externes dans un dossier nommé /static dans le même répertoire que votre jar et Spring les analysera par défaut. Donc, si vous avez static/images/, vous pouvez référencer vos images avec:

<img th:src="@{/images/img.ext}"/>

Vous voudriez donc utiliser new File("/static/images/" + imgName);

1
Scott 8 mai 2018 à 20:18

Pour accéder à l'image depuis votre images folder,

enter image description here

Vous devez remplacer la méthode addResourceHandlers de la classe WebMvcConfigurerAdapter comme ceci:

@Configuration
public class ResourceConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/images/**").addResourceLocations("file:images/");
    }
}

Après cela, vous devez ajouter / avant les images dans une URL comme celle-ci:

<img th:src="@{'/images/' + ${post.imageName}}"/>
7
Ajit Soman 9 mai 2018 à 12:33