選擇文件的js方法


 

自定義的 file.js文件

 1 let fileInputEle;
 2 let fileInputHandlerDefer = {};
 3 import { startsWith } from "lodash-es";
 4 // 選擇文件
 5 export const getFileByUserSelect = (limitTypes, multiple) => {
 6   if (!fileInputEle) {
 7     fileInputEle = document.createElement("input");
 8     fileInputEle.setAttribute("type", "file");
 9     fileInputEle.style.display = "none";
10     fileInputEle.addEventListener("change", () => {
11       if (fileInputEle.files && fileInputEle.files.length) {
12         if (multiple) {
13           fileInputHandlerDefer.resolve(fileInputEle.files);
14         } else {
15           fileInputHandlerDefer.resolve(fileInputEle.files[0]);
16         }
17       } else {
18         fileInputHandlerDefer.reject();
19       }
20     });
21   }
22   fileInputEle.removeAttribute("multiple");
23   fileInputEle.removeAttribute("accept");
24   fileInputEle.value = "";
25   if (multiple) {
26     fileInputEle.setAttribute("multiple", "multiple");
27   }
28   if (limitTypes && limitTypes.length) {
29     fileInputEle.setAttribute(
30       "accept",
31       limitTypes.map(one => (startsWith(one, ".") ? one : `.${one}`)).join(",")
32     );
33   }
34   return new Promise((resolve, reject) => {
35     fileInputHandlerDefer.resolve = resolve;
36     fileInputHandlerDefer.reject = reject;
37     fileInputEle.click();
38   });
39 };
40 
41 // 
42 export const readFile = (file, type, charset) => {
43   let reader = new FileReader();
44   return new Promise((resolve, reject) => {
45     reader.onload = function () {
46       resolve(this.result);
47     };
48     reader.onerror = function () {
49       reject();
50     };
51     let method;
52     switch (type) {
53       case "arrayBuffer":
54         method = "readAsArrayBuffer";
55         break;
56       case "binaryString":
57         method = "readAsBinaryString";
58         break;
59       case "dataURL":
60         method = "readAsDataURL";
61         break;
62       case "text":
63         method = "readAsText";
64         break;
65     }
66     // 只有 text 需要 charset 參數
67     reader[method](file, charset || "uft-8");
68   });
69 };

使用示例:

1 // 只允許選擇jpg和png圖片,且支持多選文件
2 getFileByUserSelect(["jpg","png"],true).then(files=>{
3    console.log(files) 
4 })

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM