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