WebApp を開発するとき、サーバーへのファイルのアップロード、ローカルへのファイルのダウンロード、ファイルのキャッシュなど、ファイル関連の操作が発生することがあります。以下では、いくつかの異なる方法を紹介します。ファイルを処理するために。
ファイルをアップロードする最も一般的な方法は、input タグを使用することです。input タグの type="file" を設定すると、ユーザーがアップロードするファイルをローカルで選択できるようになります。
function InputFile() { const [file, setFile] = useState(null); const handleChange = (e: React.ChangeEvent ) => { const file = e.target.files?.[0]; if (!file) return; setFile(file); }; return }
ファイル システム アクセス API (ファイル システム アクセス API) は、ファイル システム API の一部であり、API を使用してユーザーの操作でファイルの読み書きを行うことができます。
この API をファイル操作に使用する場合、次のインターフェイスが使用されます
export function PickerFS() { const [file, setFile] = useState(null); const handleChooseFile = async () => { const fileHandles = await window.showOpenFilePicker(); const file = await fileHandles[0].getFile(); setFile(file); }; return }
export function PickerFS() { const handleChooseFile = async () => { const directoryHandle = await window.showDirectoryPicker(); const keys = directoryHandle.keys(); // 打印该目录下所有文件的名字 for await (const key of keys) { console.log(key); } }; return }
export function PickerFS() { const [file, setFile] = useState(null); const handleDownloadFile= async () => { const opts = { suggestedName: "test.txt", types: [ { description: "Text file", accept: { "text/plain": [".txt"] }, }, ], }; const fileHandle = await window.showSaveFilePicker(opts); const writable = await fileHandle.createWritable(); await writable.write("Hello, world!"); await writable.close(); }; return }
ソース プライベート ファイル システムは、上記のファイル アクセス システムに似ており、ファイル システム API の一部ですが、それらの最も直接的な違いは、ユーザーに表示されるかどうかです。 showXXX インターフェイスはすべてファイル (ディレクトリ) セレクターを開く必要があり、ユーザーはファイル (ディレクトリ) をアクティブに選択する必要がありますが、保存されたファイルはユーザーが指定したパスに保存する必要がありますが、ソースの対話はプライベートです。ファイル システムはユーザーには表示されず、保存されたファイルは処理されたデータであり、元のデータはユーザーには表示されません。
export function OpFs() { const handleChooseFile = async (event: React.ChangeEvent) => { const fileList = event.target.files; const file = fileList && fileList[0]; if (!file) return; const opfsRoot = await navigator.storage.getDi rectory(); const fileHandle = await opfsRoot.getFileHandle(file.name, { create: true }); const writable = await fileHandle.createWritable(); await writable.write(file); await writable.close(); }; return ; }
await navigator.storage.getDirectory() は、ユーザーのローカル ファイル システムのルート ディレクトリを表すファイル ハンドルを返し、getFileHandle を通じて指定されたファイルのハンドルを取得します。つまり、ファイルが存在しない場合は、create が true になります。存在する場合は作成し、createWritable を使用して書き込み可能なストリームを作成します。開発者は、この書き込み可能なストリームを通じて指定されたファイルにデータを書き込み、最後に書き込み可能なストリームを閉じることができます。
? ファイル アクセス システムは、使用中のソース ファイル システムと非常に似ています。特定のファイルまたはディレクトリにアクセスするには、ファイル ハンドル (FileSystemFileHandle) またはフォルダー ハンドル (FileSystemDirectoryHandle) が必要です。
ハンドルはファイル自体のラッパーとして理解でき、ファイルはハンドルのインターフェイスを通じて読み取られ (getFile)、書き込まれます (createWritable)。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3