我在资源文件夹中有一个文件夹,我想要上传媒体文件。但我经常收到“找不到文件或目录”错误。
以下是我在控制器中的内容
@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";
}
这是我经常遇到的错误
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)
我在网上搜索过ResourceLoader和ClassPath。但仍然没有成功搞清楚。
答案 0 :(得分:1)
资源应该被认为是只读的,它们不能通过文件系统访问,但在部署应用程序时嵌入在war / jar中。
您必须将文件写入存在的文件系统上的路径,并且您的应用程序具有写入权限。
您可以写入临时文件,它的好处是您肯定会拥有对它的写入权限。用于测试,直到找出存储文件的永久位置,或者不需要永久存储的情况。请参阅示例:http://www.mkyong.com/java/how-to-create-temporary-file-in-java/