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ù)據(jù),解析結(jié)果返回的是一個List<FileItem>集合 //每一個FileItem對應一個Form表單的輸入項 List<FileItem> list = upload.parseRequest(request); for (FileItem item : list) { //如果fileitem中封裝的是普通輸入項的數(shù)據(jù) if (item.isFormField()) { // String name = item.getFieldName(); // //解決普通輸入項的數(shù)據(jù)的中文亂碼問題 // 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ù)據(jù)流獲取,獲得數(shù)據(jù)流你可以自由解析 , 保存 等操作 InputStream in = item.getInputStream(); //關(guān)閉流 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>
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java中基于maven實現(xiàn)zxing二維碼功能
這篇文章主要介紹了Java中基于maven實現(xiàn)zxing二維碼功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-02-02Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解
這篇文章主要介紹了Scala可變參數(shù)列表,命名參數(shù)和參數(shù)缺省詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-06-06Java并發(fā)編程Semaphore計數(shù)信號量詳解
這篇文章主要介紹了Java并發(fā)編程Semaphore計數(shù)信號量詳解,具有一定參考價值,需要的朋友可以了解下。2017-10-10Java開發(fā)如何把數(shù)據(jù)庫里的未付款訂單改成已付款
這篇文章主要介紹了Java開發(fā)如何把數(shù)據(jù)庫里的未付款訂單改成已付款,先介紹MD5算法,簡單的來說,MD5能把任意大小、長度的數(shù)據(jù)轉(zhuǎn)換成固定長度的一串字符,實現(xiàn)思路非常簡單需要的朋友可以參考下2022-11-11Canal搭建?idea設置及采集數(shù)據(jù)到kafka的操作方法
這篇文章主要介紹了Canal搭建idea設置及采集數(shù)據(jù)到kafka的相關(guān)知識,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05如何使用Jackson和JSON Pointer查詢解析任何JSON節(jié)點
本文介紹了JSON Pointer是字符串表達式,可以非常方便解析復雜JSON節(jié)點值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09