06-SpringMVC之檔案上傳
阿新 • • 發佈:2020-12-21
檔案上傳
傳統的檔案上傳(使用commons-fileupload元件)
匯入jar包
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency>
JSP程式碼
<form action="file/fileupload" method="post" enctype="multipart/form-data">
選擇檔案:<input type="file" name="upload"><br>
<input type="submit" value="上傳檔案">
</form>
controller程式碼
//流程:JSP部分上傳檔案-->使用commons-fileupload元件解析上傳的檔案-->將解析後的檔案寫入磁碟 @Controller @RequestMapping("/file") public class FileUploadController { @RequestMapping("/fileupload") public String fileUpload(HttpServletRequest request) throws Exception { System.out.println("檔案上傳"); //使用fileupload元件完場檔案上傳 //上傳位置 String path = request.getSession().getServletContext().getRealPath("/uploads/"); File file = new File(path); //判斷該路徑是否存在 if(!file.exists()){ //建立資料夾 file.mkdirs(); } //解析request物件,獲取上傳檔案項 DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); //解析request List<FileItem> list = fileUpload.parseRequest(request); System.out.println(list.size()); //遍歷 for (FileItem item:list){ //判斷當前item物件是否是上傳檔案項 if(item.isFormField()){ //說明是普通表單項 }else { //說明是上傳檔案項 //獲取上傳檔名稱 String filename = item.getName(); //把檔案的名稱設定為唯一值,uuid String uuid = UUID.randomUUID().toString().replace("-", ""); filename = uuid + "_" + filename; //完成檔案上傳 item.write(new File(path,filename)); //刪除臨時檔案 item.delete(); } } return "success"; } }
SpringMVC的檔案上傳
匯入jar包
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
配置檔案解析器
<!--在spring-mvc.xml中配置-->
<!--配置檔案解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--單位位元組,此處為10*1024*1024B(10MB)-->
<property name="maxUploadSize" value="10485760"></property>
</bean>
@Controller
@RequestMapping("/file")
public class FileUploadController {
//注意引數中的MultipartFile upload,變數名必須與JSP的檔案上傳標籤中name屬性名相同
@RequestMapping("/fileupload")
public String fileUpload(HttpServletRequest request, MultipartFile upload) throws Exception {
System.out.println("spring-mvc檔案上傳");
//使用fileupload元件完場檔案上傳
//上傳位置
String path = request.getSession().getServletContext().getRealPath("/uploads/");
File file = new File(path);
//判斷該路徑是否存在
if(!file.exists()){
//建立資料夾
file.mkdirs();
}
//說明是上傳檔案項
//獲取上傳檔名稱
String filename = upload.getOriginalFilename();
//把檔案的名稱設定為唯一值,uuid
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + "_" + filename;
//完成檔案上傳
upload.transferTo(new File(path,filename));
return "success";
}
}