90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
| let mask = document.querySelector(".mask");
 | ||
| let fileDom = document.querySelector(".file");
 | ||
| let tis = document.querySelector(".tis");
 | ||
| let progress = document.querySelector(".tis-progress");
 | ||
| let cancel = document.querySelector(".cancel-btn");
 | ||
| 
 | ||
| 
 | ||
| let createUpload = (file, url, key='file', header = {},data = {}) => {
 | ||
| 	console.log(`
 | ||
| 	上传地址:${url}\n
 | ||
| 	请求头:${JSON.stringify(header)}\n
 | ||
| 	参数:${JSON.stringify(data)}
 | ||
| 	`);
 | ||
| 	if (!url) {return;}
 | ||
| 	tis.style.display = 'flex';
 | ||
| 	
 | ||
| 	let formData = new FormData();
 | ||
| 		formData.append(key, file);
 | ||
| 	
 | ||
| 	for (let keys in data) {
 | ||
| 		formData.append(keys, data[keys]);
 | ||
| 	}
 | ||
| 	
 | ||
| 	let xhr = new XMLHttpRequest();
 | ||
| 	xhr.open("POST", url, true);
 | ||
| 	
 | ||
| 	for (let keys in header) {
 | ||
| 		xhr.setRequestHeader(keys, header[keys]);
 | ||
| 	}
 | ||
| 	xhr.upload.addEventListener("progress", function(event) {
 | ||
| 		if(event.lengthComputable){
 | ||
| 			let percent = Math.ceil(event.loaded * 100 / event.total) + "%";
 | ||
| 			progress.innerText = `努力上传中..${percent}`;
 | ||
| 		}
 | ||
| 	}, false);
 | ||
| 	
 | ||
| 	xhr.ontimeout = function(){
 | ||
| 		// xhr请求超时事件处理
 | ||
| 		progress.innerText = '请求超时';
 | ||
| 		setTimeout(()=>{
 | ||
| 			tis.style.display = 'none';
 | ||
| 			plus.webview.currentWebview().close();
 | ||
| 		},1000);
 | ||
| 	};
 | ||
| 	
 | ||
| 	xhr.onreadystatechange = (ev) => {
 | ||
| 		
 | ||
| 		if(xhr.readyState == 4) {
 | ||
| 			console.log('status:'+xhr.status);
 | ||
| 			
 | ||
| 			if (xhr.status == 200) {
 | ||
| 				progress.innerText = '上传成功';
 | ||
| 				console.log('返回数据:'+xhr.responseText);
 | ||
| 				location.href = `callback?fileName=${escape(file.name)}&id=${escape(xhr.responseText)}`;
 | ||
| 			}
 | ||
| 			else {
 | ||
| 				progress.innerText = '上传失败了';
 | ||
| 			}
 | ||
| 			
 | ||
| 			setTimeout(()=>{
 | ||
| 				tis.style.display = 'none';
 | ||
| 				plus.webview.currentWebview().close();
 | ||
| 			},1000);
 | ||
| 			
 | ||
| 		}
 | ||
| 	};
 | ||
| 	xhr.send(formData);
 | ||
| 	
 | ||
| 	cancel.addEventListener("click", ()=>{
 | ||
| 		xhr.abort();
 | ||
| 		plus.webview.currentWebview().close();
 | ||
| 	});
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| mask.addEventListener("click", () => {
 | ||
| 	plus.webview.currentWebview().close();
 | ||
| });
 | ||
| 
 | ||
| document.addEventListener('UniAppJSBridgeReady', () => {
 | ||
| 	let {url,key,header,formData} = plus.webview.currentWebview();
 | ||
| 	fileDom.addEventListener('change', (event) => {
 | ||
| 		let file = fileDom.files[0];
 | ||
| 		if(file.size > (1024*1024 * 10)) {
 | ||
| 			plus.nativeUI.toast('单个文件请勿超过10M,请重新上传');
 | ||
| 			return;
 | ||
| 		}
 | ||
| 		createUpload(file, url, key,header,formData);
 | ||
| 	}, false);
 | ||
| }); |