目錄
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();
}
}
}