Spring MVC将上传的MultipartFile保存到特定文件夹

时间:2012-06-01 09:45:37

标签: spring file tomcat image-uploading

我想将上传的图像保存到部署在Tomcat上的Spring 3 MVC应用程序中的特定文件夹

我的问题是我无法将上传的图像文件保存到运行applciation的主机上。

以下是我的尝试:

private void saveFile(MultipartFile multipartFile, int id) throws Exception {
    String destination = "/images/" + id + "/"  + multipartFile.getOriginalFilename();
    File file = new File(destination);
    multipartFile.transferTo(file);
}

结果:FileNotFoundException - 是的,我确实要创建这个文件!?!

我使用context.getRealPathgetResources("destination")进行了尝试,但没有成功。

如何使用我的多部分文件的内容在我的应用的特定文件夹中创建新文件?

6 个答案:

答案 0 :(得分:28)

此代码肯定会对您有所帮助。

String filePath = request.getServletContext().getRealPath("/"); 
multipartFile.transferTo(new File(filePath));

答案 1 :(得分:11)

让我们在webapp中创建上传目录并将文件保存在 webapp / uploads 中:

@RestController
public class GreetingController {

    private final static Logger log = LoggerFactory.getLogger(GreetingController.class);

    @Autowired
    private HttpServletRequest request;


    @RequestMapping(value = "/uploadfile", method = RequestMethod.POST)
        public
        @ResponseBody
        ResponseEntity handleFileUpload(@RequestParam("file") MultipartFile file) {
            if (!file.isEmpty()) {
                try {
                    String uploadsDir = "/uploads/";
                    String realPathtoUploads =  request.getServletContext().getRealPath(uploadsDir);
                    if(! new File(realPathtoUploads).exists())
                    {
                        new File(realPathtoUploads).mkdir();
                    }

                    log.info("realPathtoUploads = {}", realPathtoUploads);


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

代码
String realPathtoUploads = request.getServletContext().getRealPath(uploadsDir);

如果我从Idea IDE中运行应用程序,

会返回下一个路径 C:\Users\Iuliia\IdeaProjects\ENumbersBackend\src\main\webapp\uploads\

和下一个路径,如果我制作.war并在Tomcat下运行它:
D:\Programs_Files\apache-tomcat-8.0.27\webapps\enumbservice-0.2.0\uploads\

我的项目结构:
enter image description here

答案 2 :(得分:1)

我看到了一个使用xml配置的spring 3示例(请注意,这不适用于Spring 4.2。*):http://www.devmanuals.com/tutorials/java/spring/spring3/mvc/spring3-mvc-upload-file.html `



<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="100000" />
<property name="uploadTempDir" ref="uploadDirResource" />
</bean>

<bean id="uploadDirResource" class="org.springframework.core.io.FileSystemResource">
<constructor-arg>
<value>C:/test111</value>
</constructor-arg>
</bean>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

String ApplicationPath = 
        ContextLoader.getCurrentWebApplicationContext().getServletContext().getRealPath("");

这是如何在Spring中获取App的真实路径(不使用响应,会话......)

答案 4 :(得分:0)

以下在ubuntu上为我工作:

String filePath = request.getServletContext().getRealPath("/");
File f1 = new File(filePath+"/"+multipartFile.getOriginalFilename());
multipartFile.transferTo(f1);

答案 5 :(得分:0)

您可以从multipartfile获取inputSream并将其复制到所需的任何目录中。

kotlin-stdlib-jdk7

这适用于Linux和Windows。