2016-05-02 1 views
0

J'ai un dossier dans le dossier des ressources où je veux télécharger des fichiers multimédias. Mais je reçois constamment l'erreur 'No file or directory found'.Comment télécharger des fichiers dans le dossier des ressources dans le reste du printemps

Voici ce que j'ai dans mon contrôleur

@Autowired 
ServletContext servletContext; 

@RequestMapping(value = "/uploads", method = RequestMethod.POST) 
public String insert(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException { 

    // String path = new 
    // ClassPathResource("/src/main/resources/uploads").getPath(); 

    // FileCopyUtils.copy(file.getBytes(), new File(path)); 

    String webappRoot = servletContext.getRealPath("/"); 
    String relativeFolder = File.separator + "resources" + File.separator + "uploads" + File.separator; 
    System.out.println(webappRoot); 
    System.out.println(relativeFolder); 

    String filename = webappRoot + relativeFolder + file.getOriginalFilename(); 

    FileCopyUtils.copy(file.getBytes(), new File(filename)); 

    return "uploaded successfully"; 
} 

Et voici l'erreur que je reçois constamment

SEVERE: Servlet.service() for servlet [api] in context with path [/ek-service] threw exception 
java.io.FileNotFoundException: /home/ekbana/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/ek-service/resources/uploads/2.jpg (No such file or directory) 

J'ai cherché partout sur le web a essayé ResourceLoader et ClassPath. Mais toujours pas de succès à comprendre.

+1

Vous ne pouvez pas, vous ne devriez pas vouloir cela. Le 'src/main/resources' est seulement là pour indiquer les sources non java. Lors de la compilation et de la création d'une guerre, il n'y a plus de dossier de ressources. C'est en fait la racine du classpath et vous ne pourrez pas le télécharger. –

+0

Alors que dois-je faire? Je suis coincé ici depuis tôt le matin! – user3127109

+0

Utilisez un chemin quelque part sur le disque. –

Répondre

0

Les ressources doivent être considérées comme étant en lecture seule, elles ne sont pas accessibles via le système de fichiers, mais sont intégrées dans le war/jar lorsque vous déployez une application.

Vous devez écrire le fichier dans un chemin sur le système de fichiers existant et auquel votre application a accès en écriture.

Vous pouvez écrire dans un fichier temporaire, il a l'avantage que vous y aurez certainement accès en écriture. Utile pour tester jusqu'à ce que vous trouviez un emplacement permanent pour stocker le fichier, ou pour les cas où le stockage permanent n'est pas nécessaire. Voir l'exemple: http://www.mkyong.com/java/how-to-create-temporary-file-in-java/