如何使用spring mvc将图像上传到webapp / resources / images目录?

我有存储库类,我想在将产品详细信息添加到存储库之前将来自MultipartFile的映像存储到webapp / resources / images目录?

@Override public void addProduct(Product product) { Resource resource = resourceLoader.getResource("file:webapp/resources/images"); MultipartFile proudctImage = product.getProudctImage(); try { proudctImage.transferTo(new File(resource.getFile()+proudctImage.getOriginalFilename())); } catch (IOException e) { throw new RuntimeException(e); } listOfProducts.add(product); } 

我的存储库类是ResourceLoaderAware。 我收到fileNotFoundException,“imagesDesert.jpg”是我试图上传的图片

 java.io.FileNotFoundException: webapp\resources\imagesDesert.jpg (The system cannot find the path specified) 

这个控制器对我来说很好。

来源: https : //askgif.com/blog/126/how-can-i-upload-image-using-spring-mvc-java/

试试这个

 package net.viralpatel.spring3.controller; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; import net.viralpatel.spring3.form.FileUploadForm; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; @Controller public class FileUploadController { //private String saveDirectory = "D:/Test/Upload/"; //Here I Added private String saveDirectory = null; //Here I Added @RequestMapping(value = "/show", method = RequestMethod.GET) public String displayForm() { return "file_upload_form"; } @SuppressWarnings("null") @RequestMapping(value = "/save", method = RequestMethod.POST) public String save( @ModelAttribute("uploadForm") FileUploadForm uploadForm, Model map,HttpServletRequest request) throws IllegalStateException, IOException{ List files = uploadForm.getFiles(); List fileUrl = new ArrayList();; String fileName2 = null; fileName2 = request.getSession().getServletContext().getRealPath("/"); saveDirectory = fileName2+"images\\"; List fileNames = new ArrayList(); //System.out.println("user directory : "+System.getProperty("user.dir")); System.out.println("applied directory : " + saveDirectory); if(null != files && files.size() > 0) { for (MultipartFile multipartFile : files) { String fileName = multipartFile.getOriginalFilename(); System.out.println("applied directory : " + saveDirectory+fileName); if(!"".equalsIgnoreCase(fileName)){ //Handle file content - multipartFile.getInputStream() fileUrl.add(new String(saveDirectory + fileName)); multipartFile.transferTo(new File(saveDirectory + fileName)); //Here I Added fileNames.add(fileName); } //fileNames.add(fileName); //Handle file content - multipartFile.getInputStream() //multipartFile.transferTo(new File(saveDirectory + multipartFile.getOriginalFilename())); //Here I Added } } map.addAttribute("files", fileNames); map.addAttribute("imageurl",fileUrl); return "file_upload_success"; } } 

最后我能够解决这个问题,我们不需要指定文件:前缀,而且默认情况下resourceLoader.getResource()将在我们的Web应用程序的根目录中查找资源,因此无需指定webapp文件夹名称。 所以最后以下代码对我有用

 @Override public void addProduct(Product product) { MultipartFile proudctImage = product.getProudctImage(); if (!proudctImage.isEmpty()) { try { proudctImage.transferTo(resourceLoader.getResource("resources/images/"+product.getProductId()+".png").getFile()); } catch (Exception e) { throw new RuntimeException("Product Image saving failed", e); } } listOfProducts.add(product); }