servlet完成form格式下的文件 文本信息上傳(基於MultipartHttpServletRequest實現文件上傳)


下載==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(",");//字符串轉為字符串數組

  

 

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM