request.getServletContext()getRealPath();是返回我的目标目录而不是src?

时间:2016-09-11 20:44:53

标签: java spring file spring-mvc netbeans

我正在尝试在我的网站上实现一个将文件保存到项目目录的功能。这是执行此操作的方法。

 @RequestMapping(value = "/upload", method = RequestMethod.POST)
public String Upload(@RequestParam("file") MultipartFile file, Principal principal, HttpServletRequest request) throws IOException {
    if (!file.isEmpty()) {

                String uploadsDir = "/uploads/";
                String realPathtoUploads =  request.getServletContext().getRealPath(uploadsDir);
                if(! new File(realPathtoUploads).exists())
                {
                    new File(realPathtoUploads).mkdir();
                }


                String orgName = file.getOriginalFilename();
                String filePath = realPathtoUploads + orgName;
                File dest = new File(filePath);
                file.transferTo(dest);


        return "user";
    }
    return "user";

}  

它正在保存文件,但它保存在目标目录中。我不应该将文件保存到我的src目录而不是我的目标吗?如何更改它以便直接转到src?谢谢!

如果有任何不同,我正在使用netbeans btw。

1 个答案:

答案 0 :(得分:1)

所有与路径相关的方法实际上都是根据容器启动应用程序的文件夹计算路径。因此,如果您使用maven启动了Tomcat或Jetty或其他容器,则应用程序是从目标文件夹启动的,这是maven放置战争和所有其他资源的地方。

因此,getRealPath实际上获取应用程序位置并连接相对的" / uploads"它。

当然,您的容器应该按预期运行。

您的要求是可以实现的,但是如果您选择自己操纵路径,则文件夹位置的任何更改都会强制手动更改它。

你可以这样做:

String rootPath = "/home/user/";
String downlods = "downloads";

String realPathtoUploads = rootPath + downlods ;

if(! new File(realPathtoUploads).exists()) {
  new File(realPathtoUploads).mkdir();
}

HTH, 伽