h5-uploader.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. let mask = document.querySelector(".mask");
  2. let fileDom = document.querySelector(".file");
  3. let tis = document.querySelector(".tis");
  4. let progress = document.querySelector(".tis-progress");
  5. let cancel = document.querySelector(".cancel-btn");
  6. let createUpload = (file, url, key='file', header = {},data = {}) => {
  7. console.log(`
  8. 上传地址:${url}\n
  9. 请求头:${JSON.stringify(header)}\n
  10. 参数:${JSON.stringify(data)}
  11. `);
  12. if (!url) {return;}
  13. tis.style.display = 'flex';
  14. let formData = new FormData();
  15. formData.append(key, file);
  16. for (let keys in data) {
  17. formData.append(keys, data[keys]);
  18. }
  19. let xhr = new XMLHttpRequest();
  20. xhr.open("POST", url, true);
  21. for (let keys in header) {
  22. xhr.setRequestHeader(keys, header[keys]);
  23. }
  24. xhr.upload.addEventListener("progress", function(event) {
  25. if(event.lengthComputable){
  26. let percent = Math.ceil(event.loaded * 100 / event.total) + "%";
  27. progress.innerText = `努力上传中..${percent}`;
  28. }
  29. }, false);
  30. xhr.ontimeout = function(){
  31. // xhr请求超时事件处理
  32. progress.innerText = '请求超时';
  33. setTimeout(()=>{
  34. tis.style.display = 'none';
  35. plus.webview.currentWebview().close();
  36. },1000);
  37. };
  38. xhr.onreadystatechange = (ev) => {
  39. if(xhr.readyState == 4) {
  40. console.log('status:'+xhr.status);
  41. if (xhr.status == 200) {
  42. progress.innerText = '上传成功';
  43. console.log('返回数据:'+xhr.responseText);
  44. location.href = `callback?fileName=${file.name}&id=${xhr.responseText}`;
  45. }
  46. else {
  47. progress.innerText = '上传失败了';
  48. }
  49. setTimeout(()=>{
  50. tis.style.display = 'none';
  51. plus.webview.currentWebview().close();
  52. },1000);
  53. }
  54. };
  55. xhr.send(formData);
  56. cancel.addEventListener("click", ()=>{
  57. xhr.abort();
  58. plus.webview.currentWebview().close();
  59. });
  60. }
  61. mask.addEventListener("click", () => {
  62. plus.webview.currentWebview().close();
  63. });
  64. document.addEventListener('UniAppJSBridgeReady', () => {
  65. let {url,key,header,formData} = plus.webview.currentWebview();
  66. fileDom.addEventListener('change', (event) => {
  67. let file = fileDom.files[0];
  68. if(file.size > (1024*1024 * 10)) {
  69. plus.nativeUI.toast('单个文件不能超过10M,请重新上传');
  70. return;
  71. }
  72. console.log(file.name);
  73. createUpload(file, url, key,header,formData);
  74. }, false);
  75. });