h5-uploader.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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) {
  13. return;
  14. }
  15. tis.style.display = 'flex';
  16. let formData = new FormData();
  17. formData.append(key, file);
  18. for (let keys in data) {
  19. formData.append(keys, data[keys]);
  20. }
  21. let xhr = new XMLHttpRequest();
  22. xhr.open("POST", url, true);
  23. for (let keys in header) {
  24. xhr.setRequestHeader(keys, header[keys]);
  25. }
  26. xhr.upload.addEventListener("progress", function(event) {
  27. if (event.lengthComputable) {
  28. let percent = Math.ceil(event.loaded * 100 / event.total) + "%";
  29. progress.innerText = `努力上传中..${percent}`;
  30. }
  31. }, false);
  32. xhr.ontimeout = function() {
  33. // xhr请求超时事件处理
  34. progress.innerText = '请求超时';
  35. setTimeout(() => {
  36. tis.style.display = 'none';
  37. plus.webview.currentWebview().close();
  38. }, 1000);
  39. };
  40. xhr.onreadystatechange = (ev) => {
  41. if (xhr.readyState == 4) {
  42. console.log('status:' + xhr.status);
  43. if (xhr.status == 200) {
  44. progress.innerText = '上传成功';
  45. location.href = `callback?fileName=${escape(file.name)}&id=${escape(xhr.responseText)}`;
  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 {
  66. url,
  67. key,
  68. header,
  69. formData
  70. } = plus.webview.currentWebview();
  71. fileDom.addEventListener('change', (event) => {
  72. let file = fileDom.files[0];
  73. if (file.size > (1024 * 1024 * 10)) {
  74. plus.nativeUI.toast('单个文件请勿超过10M,请重新上传');
  75. return;
  76. }
  77. createUpload(file, url, key, header, formData);
  78. }, false);
  79. });