摘要:把表單是的是基于流的,只能獲取一次,重復獲取將為空當上傳文件的控件與的字段混合時直接用一般是不行的下面的代碼進行同時表單參數獲取和文件上傳這里取得字段名稱如果已經存在此字段信息多選列表或多個同名的隱藏域等第一次取到這個名的字段這里而要對文
把Form表單是的enctype="multipart/form-data"是基于流的,只能獲取一次,重復獲取將為空,當上傳文件的input控件與hidden的input字段混合時,直接用request.getParameter一般是不行的.
下面的代碼進行同時表單參數獲取和文件上傳:
import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.fileupload.servlet.ServletRequestContext; ... Map> getFieldMap( HttpServletRequest request) throws UnsupportedEncodingException { Map > fieldsMap; fieldsMap = (Map >) request .getAttribute(ServletFileUpload.MULTIPART_FORM_DATA); if (fieldsMap == null) { fieldsMap = new HashMap >(); request.setAttribute(ServletFileUpload.MULTIPART_FORM_DATA, fieldsMap); } else { return fieldsMap; } ServletFileUpload fu = new ServletFileUpload(new DiskFileItemFactory()); List li = null; try { li = fu.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } int m = 0; if (li != null) { Iterator iter = li.iterator(); while (iter.hasNext()) { FileItem fi = (FileItem) iter.next(); if (fi.isFormField()) { Vector vec = new Vector (); String fieldName = fi.getFieldName(); // 這里取得字段名稱 // 如果已經存在此字段信息(多選列表或多個同名的隱藏域等) if (fieldsMap.get(fieldName) != null) { vec = (Vector ) fieldsMap.get(fieldName); vec.add(fi.getString(request.getCharacterEncoding())); } // 第一次取到這個名的字段 else { // logger.info("name:" + fieldName + " value: " // + fi.getString(request.getCharacterEncoding())); vec.add(fi.getString(request.getCharacterEncoding())); fieldsMap.put(fieldName, vec); } } else { List fileNames = (List ) request .getAttribute(UPLOADEDFILENAME_ATTRIBUTE); if (fileNames == null) { fileNames = new ArrayList (); request.setAttribute(UPLOADEDFILENAME_ATTRIBUTE, fileNames); } String storePath = request.getSession().getServletContext() .getRealPath(UPLOADEDFILEPATH); try { if (fi.getSize() > 0) { //這里而要對文件重全名, 可能從之前的filename取得擴展名,并白名單過濾 fi.write(new File("somefilename"+m++)); // 寫文件到服務器. } } catch (Exception e) { e.printStackTrace(); } } } } return fieldsMap; }
這里用的是apache的common-fileupload模塊.
如果您使用maven構建, 需要在pom.xml里添加:
commons-fileupload commons-fileupload 1.2
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68149.html
摘要:搭建圖片服務器本章內容通過和搭建圖片服務器。第二個部分是為了更好的體驗上傳,批量上傳,回顯功能的富文本編輯器。總結搭建服務器的思維實現上傳圖片的功能上傳圖片的功能源碼搭建圖片服務器到這里就結束了,有什么不足的地方,請賜教。 Nginx 搭建圖片服務器 本章內容通過Nginx 和 FTP 搭建圖片服務器。在學習本章內容前,請確保您的Linux 系統已經安裝了Nginx和Vsftpd。 N...
摘要:簡介注解用于修飾的方法,根據的的內容,通過適當的轉換為客戶端需要格式的數據并且寫入到的數據區,從而不通過視圖解析器直接將數據響應給客戶端。并且這些解析器都實現了接口,在接口中有四個最為主要的接口方法。 SpringMVC 細節方面的東西很多,所以在這里做一篇簡單的 SpringMVC 的筆記記錄,方便以后查看。 Spring MVC是當前最優秀的MVC框架,自從Spring 2.5版本...
摘要:你可以通過在應用程序上下文中添加一個解析器來啟用的處理。當的檢測到一個請求時,它會激活你聲明好的解析器,然后把這個解析器轉交給請求。解析器會把當前的扭曲為一個支持文件上傳的。首先,創建一個帶有的表單,這樣用戶就可以通過這個表單上傳文件了。 ??最近家里的網出現了莫名其妙的問題,連不上碼云了,所以把示例遷到了 github 上。本示例見這個項目的 master 分支的 ZestMulti...
摘要:文件上傳解析請求正文的每部分的內容。獲取上傳文件的大小獲取上傳文件對應的輸入流把上傳的文件保存到指定文件中。如果上傳的文件超過,用磁盤作為緩存。如果自己用流實現的文件上傳,要在流關閉后,清理臨時文件。 一、文件的上傳和下載1、文件上傳的原理分析1.1文件上傳的必要前提:a、提供form表單,method必須是postb、form表單的enctype必須是multipart/form-d...
摘要:處理表單在使用時提交表單遇到了如下問題表單請求的通常有兩種和。前一種類似于請求用連接參數,通常適用于字符串,第二種就通常適用于文件和參數混合的類型。對于第一種請求參數,的大多數例子都默認支持。 spring mvc處理表單 在使用spring mvc時 提交表單遇到了如下問題 表單請求的headers通常有兩種content type: application/x-www-form-u...
閱讀 2652·2021-09-09 09:33
閱讀 2810·2019-08-30 15:54
閱讀 2867·2019-08-30 14:21
閱讀 2356·2019-08-29 17:15
閱讀 3580·2019-08-29 16:13
閱讀 2759·2019-08-29 14:21
閱讀 3422·2019-08-26 13:25
閱讀 2028·2019-08-26 12:14