Spring MVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver接口实现。MultipartResolver用于处理上传请求,将上传请求包装成可以直接获取文件的数据,从而方便操作,它有两个实现类:StandardServletMultipartResolver和CommonsMultipartResolver,下面介绍CommonsMultipartResolver来完成文件上传的具体步骤:
系统的整体架构图:
整体架构
1、添加相应的jar包
commons-fileupload
commons-fileupload
1.3.1
commons-io
commons-io
2.4
2、在spring.xml中配置MultipartResolver
♦defaultEncoding:请求的编码格式,默认为ISO-8859-1,此处设置为UTF-8(注:defaultEncoding必须和JSP的pageEncoding设置一致,以便正确的读取表单的内容)
♦maxUploadSize:上传文件大小上限,单位为字符。
3、index.jsp和success.jsp
enctype="multipart/form-data"必须添加
上传文件
Created by IntelliJ IDEA.
User: Mr Wei
Date: 2020/*/*
Time: 15:53
To change this template use File | Settings | File Templates.
--%>
上传成功页面4、controller类
该网址https://blog.csdn.net/cliche_tune/article/details/102901241解释为什么传入的是文件而不是文件夹new File(path+"/"+photo.getOriginalFilename())
package com.fan.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
@Controller
public class Controller1 {
@RequestMapping("/upload")
public String saveFile(MultipartFile photo, HttpServletRequest request, ModelMap map) {
//将文件上传到uploadFile目录下
//转化服务器地址
String path=request.getRealPath("/uploadFile");
//photo.getOriginalFilename()得到文件名称
if(!photo.isEmpty()){
try {
photo.transferTo(new File(path+"/"+photo.getOriginalFilename()));
} catch (IOException e) {
e.printStackTrace();
}
}
map.addAttribute("fname",photo.getOriginalFilename());
return "success";
}
}
5、启动tomcat进行上传图片(这中间需要注意的是如果第一开始uploadFile文件是空文件,则随便传入一个文件,再启动tomcat,这样才能编译到该文件夹)