溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java原生服務器接收上傳文件不使用MultipartFile類的示例分析

發(fā)布時間:2021-07-24 11:19:29 來源:億速云 閱讀:143 作者:小新 欄目:編程語言

小編給大家分享一下Java原生服務器接收上傳文件不使用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 將會收到文件,而request將不會!
 </bean> -->

然后把原有的文件接收方法,改為此代碼,

注釋詳細,就不多廢話了:

/**
* 從 request 中獲取上傳的文件
* @warn 后續(xù)需要 刪除處理文件上傳時
* 生成的臨時文件 ,使用item.delete();
* @param request http請求
* @param encoding 解碼方式,傳null默認 utf-8
* @return 返回的是一個 FileItem 集合
*/
public List<FileItem> getUploadInputSteam(HttpServletRequest request,String encoding){
 if (encoding==null || "".equals(encoding)) {
 encoding = "UTF-8";
 }
 List<FileItem> items = new ArrayList<FileItem>();
 //初始化需要解析文件的幾個類
 DiskFileItemFactory factory = new DiskFileItemFactory();
 ServletFileUpload upload = new ServletFileUpload(factory);
 upload.setHeaderEncoding(encoding);
 if (!ServletFileUpload.isMultipartContent(request)) {
 return items;
 }
 try {
 //使用ServletFileUpload解析器解析上傳數(shù)據,解析結果返回的是一個List<FileItem>集合
 //每一個FileItem對應一個Form表單的輸入項
 List<FileItem> list = upload.parseRequest(request);
 for (FileItem item : list) {
 //如果fileitem中封裝的是普通輸入項的數(shù)據
 if (item.isFormField()) {
// String name = item.getFieldName();
//  //解決普通輸入項的數(shù)據的中文亂碼問題
// String value = item.getString(encoding);
// System.out.println(name +"="+value);
 }else{
 String fileName = item.getName();
 if (fileName==null||fileName.trim().equals("")) {
 continue;
 }
 //注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來的文件名是帶有路徑的,
 //如: 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");
 //取第一個做實驗
 FileItem item = items.get(0);
 
 //上傳的文件名
 String fileName = item.getName();
 fileName = fileName.substring(fileName.lastIndexOf("\\")+1);
 
 //數(shù)據流獲取,獲得數(shù)據流你可以自由解析 , 保存 等操作
 InputStream in = item.getInputStream();
 
 //關閉流
 in.close();
 
 //最后一定要刪除,item的臨時文件
 item.delete();
 return "success!";
}

注意:

1.解析文件的類 都來自 org.apache.commons 的這個包

2.前端傳來一定要寫 好表單的,action 的 url ,enctype="multipart/form-data",post請求

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>

看完了這篇文章,相信你對“Java原生服務器接收上傳文件不使用MultipartFile類的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI