我按照这种方法成功上传到"/var/www/java/Football/src/main/webapp/resources/images"
文件夹但是这里我需要指定完整路径,现在问题是直接获取根路径,就像"webapp/resources/images"
无需指定完整路径,如何获得根路径?
@RequestMapping(value="/saveDeal",method=RequestMethod.POST)
public String saveDeal(@ModelAttribute("saveDeal") Deal deal,BindingResult result,@RequestParam("couponCode") MultipartFile file,HttpServletRequest request){
if(!file.isEmpty()){
try{
byte[] bytes=file.getBytes();
System.out.println("Byte Data :"+bytes);
String fileName=file.getOriginalFilename();
File newFile = new File("/var/www/java/Football/src/main/webapp/resources/images");
if (!newFile.exists()){
newFile.mkdirs();
}
File serverFile = new File(newFile.getAbsolutePath()+File.separator+fileName);
BufferedOutputStream stream = new BufferedOutputStream(
new FileOutputStream(serverFile));
stream.write(bytes);
stream.close();
}catch(Exception e){
e.printStackTrace();
}
}
return "redirect:viewDeals.html";
}
答案 0 :(得分:0)
是的,请使用ServletContext#getRealPath()
尝试将图像存储在" src / main / webapp / resources / profile-pictures":
下@RequestMapping(value="/upload", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam("imageFile") MultipartFile file, Principal principal) {
String webappRoot = servletContext.getRealPath("/");
String LoggedInUser = principal.getName();
User user = userService.findLoggedInUser(LoggedInUser);
try {
if (!file.isEmpty()) {
BufferedImage src = ImageIO.read(new ByteArrayInputStream(file.getBytes()));
//Images will be stored under "src/main/webapp/resources/profile-pictures"
File destination = new File(webappRoot + "/resources/profile-pictures/ProfileImage"+user.getName()+".jpg");
ImageIO.write(src, "png", destination);
}
} catch (Exception e) {
System.out.println("Exception occured" + e.getMessage());
return "redirect:/account/upload?success=false";
}
return "redirect:/account/upload?success=true";
}
您可以参考此Repository中的完整源代码。
答案 1 :(得分:0)
我想知道你对' root'的意思。路径。作为一个servlet,您不知道您的上下文是什么,在什么应用程序服务器中,以及您是否正在运行爆炸或在战争(或EAR)中。 例如,运行代码的人可能已将其编译在JAR中,JAR打包在WAR中,该WAR打包在EAR中。然后没有真正的根源'你的(已编译的)java文件,如果有(如果它在磁盘上爆炸),它仍然是只读的。
所以我不认为这会有用。
您需要定义一个存储文件的目录(可能是可配置的)。
让它由FileResource注入,然后配置必须注意定义一个合适的位置。在Unix上,在Windows上可能是/var/user/JavaTempUser/uploads
,可能是e:\uploads
。哎呀,它甚至可能是JavaO或者旧的东西。
作为一名java程序员,你应该知道你不知道将运行什么操作系统(因此文件抽象)。
答案 2 :(得分:0)
这样可以正常试用....它将返回整个路径
String filePath = "/uploads/filename";
// get absolute path of the application
ServletContext context = request.getServletContext();
String appPath = context.getRealPath("");
OR
String filepath = "/uploads/" + "tenant/" + tenant + "/project/"
+ projectId + "/task/" + taskId;
String realPathtoFetch = request.getServletContext().getRealPath(
filepath);