Java原生服務(wù)器接收上傳文件 不使用MultipartFile類
由于工作中 使用 MultipartFile 與現(xiàn)有的一些上傳文件組件沖突
所以使用其他的接收上傳文件的方法.
首先我把 MultipartFile 類的配置文件注釋掉.
<!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8" /> <property name="maxUploadSize" value="10485760" /> 最多上傳10M,初始化了此類,MultipartFile 將會(huì)收到文件,而request將不會(huì)! </bean> -->
然后把原有的文件接收方法,改為此代碼,
注釋詳細(xì),就不多廢話了:
/**
* 從 request 中獲取上傳的文件
* @warn 后續(xù)需要 刪除處理文件上傳時(shí)
* 生成的臨時(shí)文件 ,使用item.delete();
* @param request http請(qǐng)求
* @param encoding 解碼方式,傳null默認(rèn) utf-8
* @return 返回的是一個(gè) FileItem 集合
*/
public List<FileItem> getUploadInputSteam(HttpServletRequest request,String encoding){
if (encoding==null || "".equals(encoding)) {
encoding = "UTF-8";
}
List<FileItem> items = new ArrayList<FileItem>();
//初始化需要解析文件的幾個(gè)類
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding(encoding);
if (!ServletFileUpload.isMultipartContent(request)) {
return items;
}
try {
//使用ServletFileUpload解析器解析上傳數(shù)據(jù),解析結(jié)果返回的是一個(gè)List<FileItem>集合
//每一個(gè)FileItem對(duì)應(yīng)一個(gè)Form表單的輸入項(xiàng)
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
//如果fileitem中封裝的是普通輸入項(xiàng)的數(shù)據(jù)
if (item.isFormField()) {
// String name = item.getFieldName();
// //解決普通輸入項(xiàng)的數(shù)據(jù)的中文亂碼問(wèn)題
// String value = item.getString(encoding);
// System.out.println(name +"="+value);
}else{
String fileName = item.getName();
if (fileName==null||fileName.trim().equals("")) {
continue;
}
//注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來(lái)的文件名是帶有路徑的,
//如: c:\a\b\1.txt,而有些只是單純的文件名,如:1.txt
//處理獲取到的上傳文件的文件名的路徑部分,只保留文件名部分
// fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
items.add(item);
}
}
} catch (Exception e) {
e.printStackTrace();
return items;
}
return items;
}
@RequestMapping("/testUpload")
@ResponseBody
public String testUpload(HttpServletRequest request) throws Exception{
//獲取文件集合
List<FileItem> items = getUploadInputSteam(request, "utf-8");
//取第一個(gè)做實(shí)驗(yàn)
FileItem item = items.get(0);
//上傳的文件名
String fileName = item.getName();
fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
//數(shù)據(jù)流獲取,獲得數(shù)據(jù)流你可以自由解析 , 保存 等操作
InputStream in = item.getInputStream();
//關(guān)閉流
in.close();
//最后一定要?jiǎng)h除,item的臨時(shí)文件
item.delete();
return "success!";
}
注意:
1.解析文件的類 都來(lái)自 org.apache.commons 的這個(gè)包
2.前端傳來(lái)一定要寫 好表單的,action 的 url ,enctype="multipart/form-data",post請(qǐng)求
3.input 按鈕指明 type="file" name="xxx" 然后還有 提交按鈕 (使用ajax異步提交也行)
例如:
<form action="test/testUpload" method="post" enctype="multipart/form-data"> <input type="file" name="myFile" value="選擇文件"> <input type="submit" value="提交文件" /> </form>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
springboot整合nacos,如何讀取nacos配置文件
這篇文章主要介紹了springboot整合nacos,如何讀取nacos配置文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
BootStrap Jstree 樹(shù)形菜單的增刪改查的實(shí)現(xiàn)源碼
這篇文章主要介紹了BootStrap Jstree 樹(shù)形菜單的增刪改查的實(shí)現(xiàn)源碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
Spring Boot 2.X 快速集成單元測(cè)試解析
這篇文章主要介紹了Spring Boot 2.X 快速集成單元測(cè)試解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Maven多模塊工程Module開(kāi)發(fā)(圖文教程)
這篇文章主要介紹了Maven多模塊工程Module開(kāi)發(fā)(圖文教程),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
淺談Java中的atomic包實(shí)現(xiàn)原理及應(yīng)用
這篇文章主要介紹了淺談Java中的atomic包實(shí)現(xiàn)原理及應(yīng)用,涉及Atomic在硬件上的支持,Atomic包簡(jiǎn)介及源碼分析等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
java Comparator.comparing排序使用示例
本文主要介紹了java Comparator.comparing排序使用示例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-10-10
SpringBoot統(tǒng)一處理功能實(shí)現(xiàn)的全過(guò)程
最近在做項(xiàng)目時(shí)需要對(duì)異常進(jìn)行全局統(tǒng)一處理,主要是一些分類入庫(kù)以及記錄日志等,下面這篇文章主要給大家介紹了關(guān)于SpringBoot統(tǒng)一功能處理實(shí)現(xiàn)的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03

