多次點選file上傳,資訊儲存在js集合中,不覆蓋上次點選資訊,js上傳多張圖片
阿新 • • 發佈:2018-12-17
頁面只有一個input file按鈕,一個確認上傳按鈕,要求:多次點選上傳,吧圖片資訊儲存入集合,點選確認按鈕,上傳所有圖片
多次點選這一個按鈕上傳圖片,在js中儲存為集合,但是遇到一個問題,當我點選第二次的時候,傳過來的this資訊會頂替掉上一次的this資訊,
也就是:上傳兩次,集合中有兩組資料,但是這兩組資料都為最後一次點選的資訊。
我需要的結果為:上傳兩次,集合中有兩組資料,每組資料為每次上傳的圖片所有資訊(相當於每次傳過來的this資料)。
在網上查了許久,也沒有改正過來,幸運的是,找到的最終的解決方案:
直接上核心程式碼:
<span>選擇圖片</span> <input onchange="fileUp(this)" id="file-up" type="file" accept="image/*" >//點選上傳,這裡是我們需要新增的方法,每次點選執行 <a href="javascirpt:void(0)" onclick="upimg();" >確定上傳</a>//這裡可以寫自己上傳的ajax方法 <script type="text/javascript"> var dellist=new Array();//接收的集合 var fileUp = function(thisvar) {//每次傳過來的this re_me = $.extend(true,{},thisvar);//這裡是重點!敲黑板! dellist.push(re_me);//新增進集合中 } </script>
走到這一步 儲存為集合已經完成
var fd = new FormData();//定義一個存放圖片資訊地方
for(var i=0;i<=dellist.length;i++){
fd.append("file",dellist);//遍歷集合,放入存放圖片的formdata中
}
//自己定義的上傳方法
function uping(){ $.ajax({ url : 'XXXXX',//訪問後臺的上傳方法路徑 data : fd, //儲存的formdata集合 type : 'POST', cache : false, processData : false, contentType : false, beforeSend : function(data) { //載入中事件 var loading = $('#fountainG'); loading.show(); //id為fountainG的div,裡面存放著一張載入中的動態圖片 }, success : function(data) { //執行成功事件,並關閉載入中事件 var loading = $('#fountainG'); loading.hide(); alert("上傳成功"); }, error : function(data) { //錯誤返回事件 var loading = $('#fountainG'); $('#image-list').html("");//展示列表為空 loading.hide();//關閉載入中圖片 alert(data); } }); }
後臺接收的方法
@RequestMapping(value = "/upload.do")
public @ResponseBody String upload(@RequestParam(value = "file") CommonsMultipartFile[] files, String phone, String[] imgName) { //上傳圖片
return picService.insertPic(phone,files,teacherUrl,imgName);
}
@Override @Transactional public String insertPic(String phone, CommonsMultipartFile[] files, String teacherUrl, String[] imgName) { // TODO Auto-generated method stub try { for(int i = 0;i<files.length;i++){ MultipartFile file = files[i]; String path = teacherUrl; String fileName = file.getOriginalFilename(); if (fileName==null || "".equals(fileName) || phone==null || "".equals(phone)) { return "fail"; } boolean mark = true; if (imgName != null && imgName.length>0) { for (String n : imgName) {//如果相片名稱在刪除名稱集合中,則不儲存 if (fileName.equals(n)) { mark=false; break; } } } if (mark) { File targetFile = new File(path+File.separator+phone, phone+"_"+fileName); if(!targetFile.exists()){ targetFile.mkdirs(); picDao.insertPic(phone+"_"+fileName,phone);//如果照片沒有上傳儲存記錄 } //儲存 file.transferTo(targetFile); } } } catch (Exception e) { e.printStackTrace(); return "fail"; } return "sucess"; }