了解Spring MVC中的MultipartFile transferTo()方法

时间:2015-02-01 22:06:45

标签: java spring

我正在使用Spring Framework的MultipartFile来允许用户将图片上传到个人资料。我在一个扩展AbstractAnnotationConfigDispatcherServletInitializer的servlet初始化器类中配置了DispatcherServlet。在该类中,我重写了customizeRegistration()方法,如下所示:

@Override
protected void customizeRegistration(Dynamic registration) {
    registration.setMultipartConfig(new MultipartConfigElement("/tmp/practicewellness/uploads", 2097152, 4194304, 0));
}

MultipartFile的transferTo()方法调用文件系统中的文件位置,临时写入上传的文件。这个位置可以在任何地方?当我在方法中使用以下位置时:

profilePicture.transferTo(new File("tmp/practicewellness/" + employee.getUsername() + ".jpg"));

...我收到以下错误:

Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [C:\Users\kyle\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\work\Catalina\localhost\practicewellness\tmp\practicewellness\uploads] is not valid

所以我可以看到它正在我的一个Eclipse插件中寻找这个文件位置。我不明白它为什么看起来那样。当我看到那里时,“tmp”目录不在那里。但无论如何,我可以进入该插件并在那里创建目录吗?或者有更好的方法来解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

我使用Spring mvc上传文件,但从未使用过transferTo(),我只是假设您的问题是由于“不存在指定路径”,因为不会有以.jpg结尾的路径。试试吧。

String path = "/tmp/practicewellness/";
File dirPath = new File(path);
if (!dirPath.exists()) {
        dirPath.mkdirs();     
}

然后执行transferTo()代码。 也不要像你那样直接设置路径。由于你是在春天这样做的,所以我假设你希望文件夹在你的Project路径中而不是eclipse的元数据路径。所以改变你的道路。

String path = request.getSession().getServletContext().getRealPath("/tmp/practicewellness/");

它将使用mkdir在Project的Webapp文件夹中创建一个文件夹。如果要保存每个用户的文件差异,可以使用以下路径为每个用户创建一个文件夹。

String path = request.getSession().getServletContext().getRealPath("/tmp/practicewellness")+"/"+employee.getUsername()+"/";