1. 程式人生 > >多次點選file上傳,資訊儲存在js集合中,不覆蓋上次點選資訊,js上傳多張圖片

多次點選file上傳,資訊儲存在js集合中,不覆蓋上次點選資訊,js上傳多張圖片

頁面只有一個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";
	}