下載==MultipartHttpServletRequest==jar包
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency>
前端代碼(偽代碼)
function f_savedata_bak(){ var formData = new FormData($('#fileForm')[0]); formData.append('userid','2'); formData.append('header',["對方賬號","交易時間","對方單位","轉入金額"]); formData.append('tableName','T_CTRI_CW_YHRJZ_TEMP'); formData.append('tableField',["C_ACCOUNTNO","C_JYSJ","C_KHMC","C_ZRJE"]); $.ajax({ type:'post', url:getContextPath() + "/*.IMPXLS", data:formData, cache:false, processData: false, contentType: false, }).success(function(data){ top.dhtmlx.alert({ title:"成功", type: "alert", ok: "確 定", text: "上傳成功!", callback: function(){ $("#btnSave").attr("disabled",false); window.returnValue = true; windowHandler.btnClose.click(); } }); }).error(function(){ top.dhtmlx.alert({ title: "錯誤", type: "alert-error", ok: "返 回", text: "上傳失敗!\n"+msg, callback: function(){ $("#btnSave").attr("disabled",false); } }); }); }
將form中的數據封裝到 formdata對象中
后端讀取 formdata中的數據
/** * @param request * 根據請求解析請求中的參數(文件與非文件)返回Map集合,並將文件上傳至服務器 * @return */ private static Map getFilePath(HttpServletRequest request) { String upload_directory = "upload"; String slash_directory = "/"; // 上傳配置 int memory_threshold = 1024 * 1024 * 3; // 3MB int max_file_size = 1024 * 1024 * 40; // 40MB int max_request_size = 1024 * 1024 * 50; // 50MB // 配置上傳參數 DiskFileItemFactory factory = new DiskFileItemFactory(); // 設置內存臨界值 - 超過后將產生臨時文件並存儲於臨時目錄中 factory.setSizeThreshold(memory_threshold); // 設置臨時存儲目錄 factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); ServletFileUpload upload = new ServletFileUpload(factory); // 設置最大文件上傳值 upload.setFileSizeMax(max_file_size); // 設置最大請求值 (包含文件和表單數據) upload.setSizeMax(max_request_size); upload.setHeaderEncoding("UTF-8"); String uploadPath = request.getContextPath()+slash_directory+upload_directory; String fileName=""; String filePath=""; // 如果目錄不存在則創建 File uploadDir = new File(uploadPath); if (!uploadDir.exists()) { uploadDir.mkdirs(); } Map paramMap = new HashMap(); try { // 解析請求的內容提取文件數據 @SuppressWarnings("unchecked") List<FileItem> formItems = upload.parseRequest(request); if (formItems != null && formItems.size() > 0) { // 迭代表單數據 for (FileItem item : formItems) { // 處理不在表單中的字段 圖片 if (!item.isFormField()) { fileName = new File(item.getName()).getName(); filePath = uploadPath + slash_directory + fileName; File storeFile = new File(filePath); item.write(storeFile); paramMap.put("fileName", fileName); paramMap.put("filePath", filePath); }else { String value = item.getString("utf-8"); paramMap.put(item.getFieldName(), value); } } } } catch (Exception e) { e.printStackTrace(); } /*Iterator<Map.Entry> entries = paramMap.entrySet().iterator(); while (entries.hasNext()) { Map.Entry<Integer, Integer> entry = entries.next(); System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); }*/ return paramMap; }
接着再調用此方法來獲取ajax傳入的參數,這里需要注意的是上一步的方法獲取到都是字符串形式的參數,因此對於前端傳入的數組類型的參數需要再轉成數組類型:
Map impfileMap = getFilePath(request);//獲取解析后的參數列表 String userid = impfileMap.get("userid").toString();//操作人 String headerStr = impfileMap.get("header").toString();//數組形式,需要轉換 String tableName = impfileMap.get("tableName").toString();//表名 String tableFieldStr = impfileMap.get("tableField").toString();//數組形式,需要轉換 String[] tHeader = headerStr.split(",");//字符串轉為字符串數組 String[] tableField = tableFieldStr.split(",");//字符串轉為字符串數組