| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- let mask = document.querySelector(".mask");
- let fileDom = document.querySelector(".file");
- let tis = document.querySelector(".tis");
- let logoDom = document.querySelector(".logo");
- let progress = document.querySelector(".tis-progress");
- let cancel = document.querySelector(".cancel-btn");
- let createUpload = (file,{ url, key='file', header = {},data = {},addName,addSize}) => {
- console.log(`
- 上传地址:${url}\n
- 上传附件:${file.name} 附件大小:${file.size}\n
- 请求头:${JSON.stringify(header)}\n
- 业务参数:${JSON.stringify(data)}
- `);
- if (!url) {return;}
- tis.style.display = 'flex';
-
- let formData = new FormData();
- for (let keys in data) {formData.append(keys, data[keys]);}
- if (addName) {formData.append(addName, file.name);console.log('补充参数:',JSON.stringify({addName:file.name}));}
- if (addSize) {formData.append(addSize, file.size);console.log('补充参数:',JSON.stringify({addSize:file.size}));}
- formData.append(key, file);
-
- 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)}&size=${file.size}&str=${escape(xhr.responseText)}`;
- }
- else {
- progress.innerText = '上传失败了';
- if (xhr.status == 0) {
- console.log('请检查请求头Content-Type与服务端是否匹配,并确认服务端已正确开启跨域');
- }
- }
-
- 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,logo,maxSize,addName,addSize} = plus.webview.currentWebview();
- if (logo) {
- let img = document.createElement('img');
- img.src = logo;
- logoDom.appendChild(img);
- }
-
- fileDom.value = '';
- fileDom.addEventListener('change', (event) => {
- let file = fileDom.files[0];
- // 默认限制文件小于10M,可自行修改
- if(file.size > (1024*1024 * Math.abs(maxSize))) {
- plus.nativeUI.toast(`单个文件请勿超过${maxSize}M,请重新上传`);
- return;
- }
- createUpload(file,{ url, key,header,addName,addSize,data:formData});
- }, false);
- });
|