SSM实现文件上传
目录
1、导入上传需要的jar包
- commons-fileupload-1.3.3.jar
- commons-io-2.6.jar
2、创建 index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>上传</title>
</head>
<body>
<h1>上传图片</h1>
<form action="/upload/saveUpload" method="post" enctype="multipart/form-data">
图片名称:<input type="text" name="name"><br>
图片:<input type="file" name="multipartFile" multiple="multiple"><br>
上传者:<input type="text" name="uploader"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
注意:
- 1.form表单的
method
属性设置为post
- 2.form表单的
enctype
属性设置为multipart/form-data
- 3.提供 <input type="
file
" name="multipartFile
">的文件上传输入框
3、在springmvc.xml文件中配置CommonsMultipartResolver文件解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置请求编码格式,必须与JSP中的pageEncoding属性一致-->
<property name="defaultEncoding" value="UTF-8"/>
<!--设置允许上传文件的最大值(2MB),单位为字节-->
<property name="maxUploadSize" value="2097152"/>
</bean>
4、编写Controller层实现文件上传
package com.itheima.controller;
import org.springframework.stereotype.Controller;
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;
import java.sql.Timestamp;
import java.util.UUID;
@Controller
@RequestMapping("/upload")
public class UploadController {
/**
* 文件上传
*
* @param multipartFile
* @param request
*/
@RequestMapping("/saveUpload")
public void saveUpload(MultipartFile multipartFile, HttpServletRequest request) {
// 以当前日期创建一个文件夹,避免单个文件夹中文件过多
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
// 截取年月日:2020-11-02
String substring = timestamp.toString().substring(0, 10);
// 设置文件上传存放的路径
String uploadPath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload/" + substring);
System.out.println("获取到的图片上传地址为:" + uploadPath);
// 获取上传文件名字
String uploadName = multipartFile.getOriginalFilename();
System.out.println("原始文件名:" + uploadName);
// 利用UUID生成新的图片名字,避免原图片被覆盖
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
// 截取上传文件的后缀
String suffix = uploadName.substring(uploadName.lastIndexOf("."));
// 拼接新的文件名字
String newUploadName = uuid + suffix;
System.out.println("新的文件名:" + newUploadName);
File dir = new File(uploadPath, newUploadName);
// exists() 测试此抽象路径名表示的文件或目录是否存在。
if (!dir.exists()) {
dir.mkdirs();
}
//MultipartFile自带的解析方法
try {
multipartFile.transferTo(dir);
} catch (IOException e) {
e.printStackTrace();
}
}
}