1、mvc配置上传解析器
<!-- 配置上传的解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为1MB -->
<property name="maxUploadSize">
<!-- spring el写法:5MB -->
<value>#{1024*1024*5}</value>
</property>
</bean>
2、实体类添加MultipartFile这个API属性
它会自动将前台上传头像的属性封装解析到这里去
上传提交方式为post enctype是上传的配置的,类似于解析器,必须要
method="post" enctype="multipart/form-data"
前台上传属性:
<input type="file" id="fileImg" name="fileImg">
//根据上面的那么属性里面的fileImg值,在controller层会封装、解析到实体类的这个MultipartFile 属性里面
private MultipartFile fileImg;
3、在controller接收,service层处理上传头像
public void add(Images images,HttpServletRequest req) throws IOException {
//获取文件名 得到是这个Api处理过后的文件 org.springframework.web.multipart.commons.CommonsMultipartFile@2310a1a2
MultipartFile fileImg = images.getFileImg();
//拿到到upload这个文件夹的绝对路径 f:a/.../upload
String realPath = req.getServletContext().getRealPath("/upload");
//判断路径是否存在,如果不存在,就创建这个文件夹
File file = new File(realPath);
if(!file.exists()){
file.mkdirs();
}
//获取到文件(原始的,上传时在计算机里面的)的名字
String filename = fileImg.getOriginalFilename();
//获取到上传文件的后缀名(不包含点.)
String extension = FilenameUtils.getExtension(filename);
/* 获取后缀名 //截取如何的符号在字符串中出现的位置
int indexOf = filename.lastIndexOf(".");
//截取指定开始的位置,然后得到新字符串,含开头
String substring = filename.substring(indexOf);
System.out.println("截取的字符:"+substring);*/
//给上传图片一个随机名 //从第0个(下标)开始截取,截取5个。 在加上后缀
filename=UUID.randomUUID().toString().substring(0,5)+"."+extension;
//将上传的文件保存在哪个文件里面
File saveFile = new File(realPath,filename);
FileOutputStream output = new FileOutputStream(saveFile);
//将图片转换成输入流(用于保存在指定的文件夹里面)
InputStream input = fileImg.getInputStream();
IOUtils.copy(input, output);
output.close();
input.close();
}