Spring mvc檔案上傳實現
jsp頁面客戶端表單編寫
三個要素:
1.表單項type=“file”
2.表單的提交方式:post
3.表單的enctype屬性是多部分表單形式:enctype=“multipart/form-data”
會將表單的資料處理為一條訊息,以標籤為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳檔案。當上傳的欄位是檔案時,會有Content-Type來表名檔案型別;content-disposition,用來說明欄位的一些資訊;由於有boundary隔離,所以multipart/form-data既可以上傳檔案,也可以上傳鍵值對,它採用了鍵值對的方式,所以可以上傳多個檔案。
3.1.當form表單修改為多部分表單時,request.getParameter()將失效。
3.2.enctype=“application/x-www-form-urlencoded”時,form表單的正文內容格式是:key=value&key=value&key=value
3.3.當form表單的enctype取值為Mutilpart/form-data時,請求正文內容就變成多部分形式:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/quick16" method="post" enctype="multipart/form-data">
名稱:<input type="text" name="name"><br>
檔案:<input type="file" name="uploadFile">
<input type="submit" value="點選提交">
</form>
</body>
</html>
需要匯入的jar座標
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
配置檔案上傳解析器
<bean id="commonsMultipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--上傳檔案的編碼型別-->
<property name="defaultEncoding" value="utf-8"></property>
<!--上傳單個檔案的大小-->
<property name="maxUploadSizePerFile" value="50000000"></property>
<!--上傳檔案的總大小-->
<property name="maxUploadSize" value="54288600"></property>
</bean>
編寫檔案上傳程式碼
@RequestMapping(value = "/quick17")
/* 告訴SpringMvc框架,方法返回的字串不是跳轉是直接在http響應體中返回*/
@ResponseBody
public void save17(String username, MultipartFile uploadFile) throws IOException {
/*獲取原始檔名*/
String originalFilename = uploadFile.getOriginalFilename();
/*儲存到伺服器上這裡是本地*/
uploadFile.transferTo(new File("F:\\upload\\"+originalFilename));
}
上傳多個檔案
jsp表單程式碼
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/quick18" method="post"
enctype="multipart/form-data">
名稱:<input type="text" name="name"><br>
檔案1:<input type="file" name="uploadFiles">
檔案2: <input type="file" name="uploadFiles">
<input type="submit" value="點選提交">
</form>
</body>
</html>
伺服器端程式碼
@RequestMapping(value = "/quick18")
/* 告訴SpringMvc框架,方法返回的字串不是跳轉是直接在http響應體中返回*/
@ResponseBody
public void save18(String username, MultipartFile[] uploadFiles) throws IOException {
for (MultipartFile uploadFile : uploadFiles) {
/*獲取原始檔名*/
String originalFilename = uploadFile.getOriginalFilename();
/*儲存到伺服器上這裡是本地*/
uploadFile.transferTo(new File("F:\\upload\\"+originalFilename));
}
}
成功儲存到本地