您好,登錄后才能下訂單哦!
小編給大家分享一下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è)資訊頻道,感謝各位的閱讀!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。