Javascript-ը կարող է հիանալի միջոց լինել ծրագրակազմի բաշխման համար՝ առանց օգտագործողներին գործադիրներ տեղադրելու պահանջի: Մի մեծ առավելություն, որը հաճախ անտեսվում է, այն է, որ այն կարող է նաև կառավարել ֆայլերը ձեր տեղական մեքենայի վրա՝ օգտագործելով File API:

Քանի որ այն այնքան քիչ է օգտագործվում, կարող է դժվար լինել թեմայի վերաբերյալ լավ ռեսուրսներ գտնելը, ուստի այս հոդվածով մենք հավաքեցինք բոլոր հիմունքները և դրանք կանդրադառնանք քայլ առ քայլ:

Թույլ տալ օգտվողներին ընտրել ֆայլեր

Մեկ ֆայլ

Առաջին հիմնական բանը թույլ տալ օգտվողներին ընտրել ֆայլեր կամ թղթապանակներ որպես մուտքային տվյալներ: Դա կարելի է անել՝ օգտագործելով HTML մուտքագրման դաշտը:

<label htmlFor="input">Select a file:</label>
<input type="file" id="input" />

Բազմաթիվ ֆայլեր

Եթե ​​մենք ցանկանում ենք թույլ տալ օգտվողին վերբեռնել մի քանի տարրեր, պարզապես ավելացրեք «բազմաթիվ» հատկանիշը:

Թղթապանակներ

Եթե ​​մենք միայն ցանկանում ենք թույլ տալ օգտվողին ընտրել թղթապանակ, օրինակ՝ որպես աշխատանքային տարածք, մենք պետք է ավելացնենք webkitdirectory հատկանիշը:

<label htmlFor="input">Select a file:</label>
<input
  type="file"
  id="input"
  /* @ts-expect-error */
  webkitdirectory=""
/>

React/Typescript-ում թվում է, թե այն ճիշտ չի վարվում, հետևաբար՝ տողի վերևի մեկնաբանությունը և դրան վերագրված դատարկ տողը:

Ընտրված ֆայլերի առբերում

Այժմ, երբ օգտվողը կարող է ընտրել ֆայլեր կամ թղթապանակներ, մենք պետք է համոզվենք, որ մենք կարող ենք դրանք պահել փոփոխականների մեջ: Ամեն անգամ, երբ օգտատերը ընտրում է ֆայլեր կամ թղթապանակներ, այն մուտքագրման դաշտում առաջացնում է փոփոխության իրադարձություն: Մենք պետք է ավելացնենք իրադարձությունների լսող այս փոփոխության իրադարձության համար: React-ում դա արվում է onChange հատկանիշին ֆունկցիա վերագրելով:

<div>
  <label htmlFor="myfile">Select a file:</label>
  <input
    type="file"
    id="input"
    onChange={handleFileChange}
    /* @ts-expect-error */
    webkitdirectory=""
  />
</div>

Եվ հետո handleFileChange գործառույթում մենք կարող ենք մշակել իրադարձությունը:

const handleFileChange = (e: any) => {
  let files = e.target.files;
  console.log(files)
};

Մուտքագրելով ֆայլերը վահանակ՝ մենք կարող ենք տեսնել բոլոր ֆայլերը և թղթապանակի կառուցվածքը (webkitRelativePath):

Ֆայլերի պահպանում

Էջերը փոխելուց կամ զննարկիչը փակելուց հետո ֆայլերի ցանկը չկորցնելու համար ցուցակը կարող է պահվել բրաուզերի տեղական պահեստում: Սա ուղղակիորեն հնարավոր չէ անել, քանի որ տեղային պահոցն աջակցում է միայն տողերին, և ֆայլերի ցանկը պահվում է որպես FileList և ոչ որպես լռելյայն զանգված:

const handleFileChange = (e: any) => {
  const files = e.target.files;
  console.log(files);
  let fileArray = [];
  let file = {};

  for (let i = 0; i < files.length; i++) {
    file = {
      lastModified: files[i].lastModified,
      lastModifiedDate: files[i].lastModifiedDate,
      name: files[i].name,
      size: files[i].size,
      type: files[i].type,
      webkitRelativePath: files[i].webkitRelativePath,
    };
    fileArray.push(file);
  }
  localStorage.setItem("files", JSON.stringify(fileArray));
  console.log(JSON.stringify(fileArray));
};

Վերևի կոդը ավելացնում է մուտք դեպի սովորական զանգված ցուցակի յուրաքանչյուր ֆայլի համար, և այս զանգվածն այնուհետև փոխակերպվում է JSON-ի, որպեսզի թույլ տա այն պահել տեղական պահեստում:

Օգնության կարիք ունեմ?

Այցելեք մեզ upshift.be կայքում և թողեք մեզ հաղորդագրություն 👋