FileUpload、SpringMVC獲取multipart/form-data文字型別獲取文字域
阿新 • • 發佈:2021-01-29
FileUpload、SpringMVC獲取multipart/form-data文字型別獲取文字域
剛學習完
SpringMVC
的CommonsMultipartResolver檔案解析器
,因為視訊上只講了單一的上傳檔案, 作為菜雞的為突發奇想:在前端開發過程中肯定有不少的表單或者非同步請求中即包含檔案也包含文字域, 在APP中的修改資訊中就是最常見的例子, 即有修改的照片、姓名、地址… 如果,檔案作檔案傳送, 文字作文字傳送, 很顯然這樣做法有時候j就是浪費伺服器的資源
。
FileUpload簡單實現檔案獲取和文字獲取
- 相關
api
查文件, 一般都是見名知意即可 - 如果使用的
SpringMVC
一定要在配置檔案中關閉檔案解析器
它會攔截multipart/form-data
請求
<!--檔案解析器-->
<!--<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxInMemorySize" value="1000000" />
</bean>-->
- Java程式碼:
@RequestMapping("/testFileUploadOld")
public String testFileUploadOld() throws Exception {
DiskFileItemFactory factory = new DiskFileItemFactory();
FileUpload fileUpload = new FileUpload(factory);
// 獲取multipart/form-data所有內容
List<FileItem> fileItems = fileUpload. parseRequest(request);
for (FileItem item: fileItems) {
if (!item.isFormField()) { // 是檔案型別就執行
System.out.println(item);
continue;
}
// 列印文字域的value
System.out.println(item.getString());
}
return "success";
}
- form表單:
<form action="user/testFileUploadOld" method="POST" enctype="multipart/form-data">
上傳檔案: <input type="file" name="uploadFile">
姓名: <input type="text" name="name">
年齡: <input type="text" name="age">
<input type="submit" value="提交">
</form>
<br>
- 輸出:
小提示
:無法用multipart/form-data
獲取,因為這不是application/x-www-form-urlencoded
SpringMVC簡單實現檔案獲取和文字獲取
- 表單:
<form action="user/testUploadSpringMVC" method="POST" enctype="multipart/form-data" >
SpringMVC上傳檔案: <input type="file" name="uploadFile" multiple />
姓名: <input type="text" name="name">
<input type="submit" value="提交">
</form>
- 配置檔案解析器
<!--檔案解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxInMemorySize" value="1000000" />
</bean>
- Java實現
@RequestMapping("/testUploadSpringMVC")
public String testUploadSpringMVC(HttpServletRequest request,
MultipartFile[] uploadFile,
@RequestParam("name") String name
)
throws IOException {
System.out.println("request獲取name: " + request.getParameter("name"));
System.out.println("註解獲取name:" + name);
for (MultipartFile mf: uploadFile) { // 如果一次性選擇多個檔案迭代檔案
System.out.println(mf.getOriginalFilename()); // 列印檔名
}
return "success";
}
- 本著猜想:
檔案解析器的加入能否將檔案和文字域分離
的原則的結果:發現可以通過request
獲取引數
是否因為加入了SpringMVC的檔案解析器, 從而將文字域和檔案分離
- 由於
檔案解析器
會攔截multipart/form-data型別中的檔案,所以我們肯定無法獲取到檔案,但是如果我們此時用request.getParameter()
能否獲取? - 配置
檔案解析器
- 表單:
<form action="user/testFileUploadOld" method="POST" enctype="multipart/form-data">
上傳檔案: <input type="file" name="uploadFile">
姓名: <input type="text" name="name">
年齡: <input type="text" name="age">
<input type="submit" value="提交">
</form>
- Java實現:
@RequestMapping("/testFileUploadOld")
public String testFileUploadOld(
HttpServletRequest request
) throws Exception {
System.out.println(request.getParameter("name"));
return "success";
}
- 結果:
- 所以猜想是正確的的, SpringMVC的
檔案解析器
會攔截檔案但是會分離普通的文字域。
實力很弱的小菜雞的記錄猜想。