File System Access API memungkinkan aplikasi web membaca atau menyimpan perubahan langsung ke file dan folder di perangkat pengguna Show
Dipublikasikan pada Selasa, 20 Agustus 2019 • Diperbarui pada Kamis, 12 Januari 2023 Pete LePage Pete adalah Pengacara Pengembang Situs web Twitter GitHub Kesalahan Mastodon Thomas Steiner Tom adalah Advokat Pengembang Situs web Twitter GitHub Kesalahan Mastodon Daftar Isi Apa itu API Akses Sistem File?File System Access API (sebelumnya dikenal sebagai Native File System API dan sebelumnya disebut Writeable Files API) memungkinkan pengembang membangun aplikasi web canggih yang berinteraksi dengan file di perangkat lokal pengguna, seperti IDE, editor foto dan video, . Setelah pengguna memberikan akses aplikasi web, API ini memungkinkan mereka membaca atau menyimpan perubahan langsung ke file dan folder di perangkat pengguna. Selain membaca dan menulis file, File System Access API menyediakan kemampuan untuk membuka direktori dan menghitung isinya File System Access API—walaupun namanya serupa—berbeda dari antarmuka 2 yang diekspos oleh , yang mendokumentasikan jenis dan operasi yang disediakan oleh browser untuk skrip ketika hierarki file dan direktori diseret dan dilepaskan ke halaman atau dipilih menggunakan Ini juga berbeda dari File API yang sudah tidak digunakan lagi. Direktori dan Spesifikasi sistem, yang mendefinisikan API untuk menavigasi hierarki sistem file dan sarana yang digunakan browser untuk mengekspos bagian kotak pasir dari sistem file lokal pengguna ke aplikasi web Jika Anda pernah bekerja dengan membaca dan menulis file sebelumnya, sebagian besar dari apa yang akan saya bagikan akan Anda kenal. Saya mendorong Anda untuk tetap membacanya, karena tidak semua sistem sama Kami telah banyak memikirkan desain dan implementasi File System Access API untuk memastikan bahwa orang dapat mengelola file mereka dengan mudah. Lihat bagian untuk informasi lebih lanjut File System Access API saat ini didukung di sebagian besar browser Chromium di Windows, macOS, ChromeOS, dan Linux. Pengecualian penting adalah Berani di mana saat ini hanya tersedia di belakang bendera. Android mendukung bagian sistem file pribadi asal dari API mulai dari Chromium 109. Saat ini tidak ada rencana untuk metode picker, tetapi Anda dapat melacak kemajuan potensial dengan membintangi crbug. com/1011535 Menggunakan API Akses Sistem FileUntuk memamerkan kekuatan dan kegunaan API Akses Sistem File, saya menulis editor teks file tunggal. Ini memungkinkan Anda membuka file teks, mengeditnya, menyimpan perubahan kembali ke disk, atau memulai file baru dan menyimpan perubahan ke disk. Tidak ada yang mewah, tetapi menyediakan cukup untuk membantu Anda memahami konsepnya CobalahLihat API Akses Sistem File beraksi di demo editor teks Baca file dari sistem file lokalKasus penggunaan pertama yang ingin saya tangani adalah meminta pengguna untuk memilih file, lalu membuka dan membaca file tersebut dari disk Minta pengguna untuk memilih file untuk dibacaTitik masuk ke File System Access API adalah. Saat dipanggil, ini menampilkan kotak dialog pemilih file, dan meminta pengguna untuk memilih file. Setelah mereka memilih file, API mengembalikan larik pegangan file. Parameter _4 opsional memungkinkan Anda memengaruhi perilaku pemilih file, misalnya, dengan mengizinkan pengguna memilih banyak file, atau direktori, atau jenis file yang berbeda. Tanpa opsi apa pun yang ditentukan, pemilih file memungkinkan pengguna untuk memilih satu file. Ini sempurna untuk editor teksSeperti banyak API canggih lainnya, pemanggilan 5 harus dilakukan dalam konteks yang aman, dan harus dipanggil dari dalam isyarat pengguna
Setelah pengguna memilih file, 5 mengembalikan array pegangan, dalam hal ini array satu elemen dengan yang berisi properti dan metode yang diperlukan untuk berinteraksi dengan fileSangat membantu untuk menyimpan referensi ke pegangan file sehingga dapat digunakan nanti. Ini diperlukan untuk menyimpan perubahan pada file, atau untuk melakukan operasi file lainnya Membaca file dari sistem fileSekarang Anda memiliki pegangan untuk file, Anda bisa mendapatkan properti file, atau mengakses file itu sendiri. Untuk saat ini, saya hanya akan membaca isinya. Memanggil _8 mengembalikan objek 9, yang berisi gumpalan. Untuk mendapatkan data dari blob, panggil salah satu metodenya, ( 0, 1, 2, atau 3)
Untuk sebagian besar kasus penggunaan, Anda dapat membaca file secara berurutan dengan metode 1, 2, atau 3. Untuk mendapatkan akses acak ke konten file, gunakan metode 0Objek 9 dikembalikan oleh 9 hanya dapat dibaca selama file yang mendasari pada disk tidak berubah. Jika file pada disk diubah, objek _9 menjadi tidak dapat dibaca dan Anda harus memanggil 1 lagi untuk mendapatkan objek 9 baru untuk membaca data yang diubahMenyatukan semuanyaSaat pengguna mengklik tombol Buka, browser menampilkan pemilih file. Setelah mereka memilih file, aplikasi membaca konten dan memasukkannya ke dalam 3
Tulis file ke sistem file lokalDi editor teks, ada dua cara untuk menyimpan file. Simpan, dan Simpan Sebagai. Simpan cukup tulis perubahan kembali ke file asli menggunakan pegangan file yang diambil sebelumnya. Tapi Save As membuat file baru, dan karenanya membutuhkan pegangan file baru Buat berkas baruUntuk menyimpan file, panggil , yang menampilkan pemilih file dalam mode "simpan", memungkinkan pengguna untuk memilih file baru yang ingin mereka gunakan untuk menyimpan. Untuk editor teks, saya juga ingin menambahkan ekstensi 5 secara otomatis, jadi saya memberikan beberapa parameter tambahan
Gotcha Terkadang pemrosesan data yang akan disimpan memerlukan waktu beberapa saat setelah pengguna mengklik tombol Simpan di aplikasi Anda. Gotcha yang umum adalah melakukan pekerjaan ini sebelum kode 4 dijalankan, menghasilkan 7. Alih-alih, dapatkan pegangan file terlebih dahulu, dan hanya setelah mendapatkan pegangan file, mulailah memproses dataSimpan perubahan ke diskAnda dapat menemukan semua kode untuk menyimpan perubahan ke file di demo editor teks saya di GitHub. Interaksi sistem file inti ada di 8. Paling sederhana, prosesnya terlihat seperti kode di bawah ini. Saya akan berjalan melalui setiap langkah dan menjelaskannya
Menulis data ke disk menggunakan objek, subkelas dari ________ 29 ______ 0. Buat aliran dengan memanggil _1 pada objek pegangan file. Saat _1 dipanggil, browser terlebih dahulu memeriksa apakah pengguna telah memberikan izin menulis ke file. Jika izin untuk menulis belum diberikan, browser akan meminta izin kepada pengguna. Jika izin tidak diberikan, 1 melempar 4, dan aplikasi tidak akan dapat menulis ke file. Di editor teks, objek _4 ditangani dalam metode 6Metode _7 mengambil string, yang diperlukan untuk editor teks. Tapi itu juga bisa menggunakan BufferSource, atau Blob. Misalnya, Anda dapat menyalurkan aliran langsung ke sana
Anda juga dapat , atau di dalam aliran untuk memperbarui file pada posisi tertentu, atau mengubah ukuran file Hati-hati Perubahan tidak ditulis ke disk hingga aliran ditutup, baik dengan memanggil 0 atau saat aliran ditutup secara otomatis oleh pipaMenentukan nama file yang disarankan dan memulai direktoriDalam banyak kasus, Anda mungkin ingin aplikasi menyarankan nama atau lokasi file default. Misalnya, editor teks mungkin ingin menyarankan nama file default 1 daripada 2. Anda dapat mencapainya dengan meneruskan properti 3 sebagai bagian dari opsi 4
Hal yang sama berlaku untuk direktori awal default. Jika Anda membuat editor teks, Anda mungkin ingin memulai penyimpanan file atau dialog buka file di folder 5 default, sedangkan untuk editor gambar, mungkin ingin memulai di folder 6 default. Anda dapat menyarankan direktori awal default dengan meneruskan properti 7 ke metode 4, 9, atau 0 seperti itu
Daftar direktori sistem yang terkenal adalah
Terlepas dari direktori sistem yang terkenal, Anda juga dapat meneruskan file atau pegangan direktori yang ada sebagai nilai untuk 7. Dialog kemudian akan terbuka di direktori yang sama
Menentukan tujuan pemetik file yang berbedaTerkadang aplikasi memiliki pemetik yang berbeda untuk tujuan yang berbeda. Misalnya, editor teks kaya memungkinkan pengguna untuk membuka file teks, tetapi juga untuk mengimpor gambar. Secara default, setiap pemilih file akan dibuka di lokasi yang terakhir diingat. Anda dapat menghindari ini dengan menyimpan _8 nilai untuk setiap jenis pemilih. Jika 8 ditentukan, implementasi pemilih file mengingat direktori terakhir yang digunakan terpisah untuk 8 itu
Menyimpan pegangan file atau pegangan direktori di IndexedDBPegangan file dan pegangan direktori adalah serializable, yang berarti bahwa Anda dapat menyimpan file atau pegangan direktori ke IndexedDB, atau memanggil 1 untuk mengirimkannya antara asal tingkat atas yang samaMenyimpan pegangan file atau direktori ke IndexedDB berarti Anda dapat menyimpan status, atau mengingat file atau direktori mana yang sedang dikerjakan pengguna. Ini memungkinkan untuk menyimpan daftar file yang baru dibuka atau diedit, menawarkan untuk membuka kembali file terakhir saat aplikasi dibuka, mengembalikan direktori kerja sebelumnya, dan banyak lagi. Di editor teks, saya menyimpan daftar lima file terbaru yang dibuka pengguna, sehingga memudahkan untuk mengakses kembali file tersebut Contoh kode di bawah ini menunjukkan penyimpanan dan pengambilan pegangan file dan pegangan direktori. Anda dapat melihat ini beraksi di Glitch. (Saya menggunakan perpustakaan idb-keyval untuk singkatnya. ) _0Pegangan dan izin file atau direktori yang disimpanKarena izin saat ini tidak bertahan di antara sesi, Anda harus memverifikasi apakah pengguna telah memberikan izin ke file atau direktori menggunakan 2. Jika belum, hubungi _3 untuk (kembali) memintanya. Ini berfungsi sama untuk pegangan file dan direktori. Anda harus menjalankan _4 atau 5 masing-masingDi editor teks, saya membuat metode 6 yang memeriksa apakah pengguna telah memberikan izin, dan jika diperlukan, membuat permintaan _1Dengan meminta izin menulis dengan permintaan baca, saya mengurangi jumlah permintaan izin; Sementara _7 objek dapat , izin saat ini perlu diberikan kembali setiap kali, yang kurang optimal. Keripik bintang. com/1011533 untuk diberi tahu tentang upaya mempertahankan izin yang diberikanMembuka direktori dan menghitung isinyaUntuk menghitung semua file dalam direktori, panggil. Pengguna memilih direktori di picker, setelah a dikembalikan, yang memungkinkan Anda menghitung dan mengakses file direktori. Secara default, Anda akan memiliki akses baca ke file dalam direktori, tetapi jika Anda memerlukan akses tulis, Anda dapat meneruskan 0 ke metode _2Jika Anda juga perlu mengakses setiap file melalui 1 untuk, misalnya, mendapatkan ukuran file individual, jangan gunakan 2 pada setiap hasil secara berurutan, melainkan proses semua file secara paralel, misalnya, melalui 3 _3Membuat atau mengakses file dan folder dalam direktoriDari direktori, Anda dapat membuat atau mengakses file dan folder menggunakan metode atau masing-masing. Dengan mengirimkan objek 4 opsional dengan kunci _7 dan nilai boolean 8 atau 9, Anda dapat menentukan apakah file atau folder baru harus dibuat jika tidak ada _4Menyelesaikan jalur item dalam direktoriSaat bekerja dengan file atau folder dalam direktori, akan berguna untuk menyelesaikan jalur item yang dimaksud. Ini dapat dilakukan dengan metode bernama tepat. Untuk penyelesaian, item dapat berupa anak langsung atau tidak langsung dari direktori _5Menghapus file dan folder dalam direktoriJika Anda telah memperoleh akses ke direktori, Anda dapat menghapus file dan folder yang ada di dalamnya dengan metode ini. Untuk folder, penghapusan secara opsional dapat bersifat rekursif dan menyertakan semua subfolder dan file yang ada di dalamnya _6Menghapus file atau folder secara langsungJika Anda memiliki akses ke pegangan file atau direktori, hubungi 02 pada 7 atau 9 untuk menghapusnya _7Metode _05 saat ini berada di belakang benderaMengganti nama dan memindahkan file dan folderFile dan folder dapat diganti namanya atau dipindahkan ke lokasi baru dengan memanggil 06 pada antarmuka 7. 7 memiliki antarmuka anak 7 dan 9. Metode _06 membutuhkan satu atau dua parameter. Yang pertama bisa berupa string dengan nama baru atau 9 ke folder tujuan. Dalam kasus terakhir, parameter opsional kedua adalah string dengan nama baru, sehingga pemindahan dan penggantian nama dapat dilakukan dalam satu langkah _8Metode _13 telah dikirimkan untuk file dalam sistem file pribadi asal (OPFS), berada di belakang tanda untuk file jika sumber atau tujuan berada di luar OPFS, dan belum didukung untuk direktoriIntegrasi seret dan lepasAntarmuka Seret dan Jatuhkan HTML memungkinkan aplikasi web untuk menerima file yang diseret dan dijatuhkan di halaman web. Selama operasi seret dan lepas, file yang diseret dan item direktori masing-masing dikaitkan dengan entri file dan entri direktori. Metode _14 mengembalikan janji dengan objek 7 jika item yang diseret adalah file, dan janji dengan objek 9 jika item yang diseret adalah direktori. Daftar di bawah ini menunjukkan ini dalam tindakan. Perhatikan bahwa antarmuka Seret dan Lepas 17 adalah 18 untuk file dan direktori, sedangkan File System Access API adalah 18 untuk file dan 21 untuk direktori _9Mengakses sistem file pribadi asalSistem file pribadi asal adalah titik akhir penyimpanan yang, seperti namanya, bersifat pribadi untuk asal halaman. Sementara browser biasanya mengimplementasikan ini dengan mempertahankan konten dari sistem file pribadi asal ini ke disk di suatu tempat, itu tidak dimaksudkan agar konten mudah diakses pengguna. Demikian pula, tidak ada harapan bahwa ada file atau direktori dengan nama yang cocok dengan nama turunan dari sistem file privat asal. Meskipun browser mungkin membuatnya tampak seperti ada file, secara internal—karena ini adalah sistem file pribadi asal—browser mungkin menyimpan "file" ini dalam database atau struktur data lainnya. Pada dasarnya, jika Anda menggunakan API ini, jangan berharap menemukan file yang dibuat cocok satu-ke-satu di suatu tempat di hard disk. Anda dapat beroperasi seperti biasa pada sistem file pribadi asal setelah Anda memiliki akses ke root 9 0Mengakses file yang dioptimalkan untuk kinerja dari sistem file pribadi asalSistem file pribadi asal menyediakan akses opsional ke jenis file khusus yang sangat dioptimalkan untuk kinerja, misalnya, dengan menawarkan akses tulis di tempat dan eksklusif ke konten file. Di Chromium 102 dan yang lebih baru, ada metode tambahan pada sistem file pribadi asal untuk menyederhanakan akses file. _23 (untuk operasi baca dan tulis sinkron). Itu diekspos pada _7, tetapi secara eksklusif di Pekerja Web _1Orang-orang yang tertarik dengan metode _25 (yaitu, varian asinkron yang tersedia di utas utama dan di Pekerja Web) harus melacak crbug. com/1323922PolifillingTidak mungkin untuk sepenuhnya mengisi ulang metode File System Access API
Kami telah mengembangkan perpustakaan yang disebut browser-fs-access yang menggunakan File System Access API sedapat mungkin dan kembali ke opsi terbaik berikut ini dalam semua kasus lainnya Keamanan dan izinTim Chrome telah merancang dan menerapkan API Akses Sistem File menggunakan prinsip inti yang ditentukan dalam Mengontrol Akses ke Fitur Platform Web yang Kuat, termasuk kontrol dan transparansi pengguna, dan ergonomi pengguna Membuka file atau menyimpan file baruPemilih file digunakan untuk membuka file yang sudah ada untuk dibacaSaat membuka file, pengguna memberikan izin untuk membaca file atau direktori melalui pemilih file. Pemilih file yang terbuka hanya dapat ditampilkan melalui gerakan pengguna saat disajikan dari konteks yang aman. Jika pengguna berubah pikiran, mereka dapat membatalkan pilihan di pemilih file dan situs tidak mendapatkan akses ke apa pun. Ini adalah perilaku yang sama dengan elemen ________11______27 Pemilih file yang digunakan untuk menyimpan file ke diskDemikian pula, saat aplikasi web ingin menyimpan file baru, browser menampilkan pemilih penyimpanan file, yang memungkinkan pengguna untuk menentukan nama dan lokasi file baru. Karena mereka menyimpan file baru ke perangkat (versus menimpa file yang sudah ada), pemilih file memberikan izin aplikasi untuk menulis ke file Folder yang dibatasiUntuk membantu melindungi pengguna dan datanya, browser mungkin membatasi kemampuan pengguna untuk menyimpan ke folder tertentu, misalnya folder sistem operasi inti seperti Windows, folder macOS Library, dll. Ketika ini terjadi, browser akan menampilkan prompt dan meminta pengguna untuk memilih folder lain Memodifikasi file atau direktori yang adaAplikasi web tidak dapat memodifikasi file di disk tanpa mendapatkan izin eksplisit dari pengguna Permintaan izinJika seseorang ingin menyimpan perubahan ke file yang sebelumnya mereka beri akses baca, browser menampilkan prompt izin, meminta izin situs untuk menulis perubahan ke disk. Permintaan izin hanya dapat dipicu oleh gerakan pengguna, misalnya dengan mengklik tombol Simpan Prompt ditampilkan kepada pengguna sebelum browser diberikan izin menulis pada file yang adaAlternatifnya, aplikasi web yang mengedit banyak file, seperti IDE, juga dapat meminta izin untuk menyimpan perubahan pada saat dibuka Jika pengguna memilih Batalkan, dan tidak memberikan akses tulis, aplikasi web tidak dapat menyimpan perubahan ke file lokal. Ini harus menyediakan metode alternatif bagi pengguna untuk menyimpan datanya, misalnya dengan menyediakan cara untuk "mengunduh" file, menyimpan data ke cloud, dll. TransparansiIkon mahakotak yang menunjukkan bahwa pengguna telah memberikan izin situs web untuk menyimpan ke file lokalSetelah pengguna memberikan izin ke aplikasi web untuk menyimpan file lokal, browser menampilkan ikon di bilah URL. Mengklik ikon membuka pop-over yang menampilkan daftar file yang telah diberikan akses oleh pengguna. Pengguna dapat dengan mudah mencabut akses itu jika mereka mau Persistensi izinAplikasi web dapat terus menyimpan perubahan ke file tanpa diminta hingga semua tab asalnya ditutup. Setelah tab ditutup, situs kehilangan semua akses. Lain kali pengguna menggunakan aplikasi web, mereka akan diminta kembali untuk mengakses file MasukanKami ingin mendengar tentang pengalaman Anda dengan File System Access API Beri tahu kami tentang desain APIApakah ada sesuatu tentang API yang tidak berfungsi seperti yang Anda harapkan?
Masalah dengan implementasinya?Apakah Anda menemukan bug dengan penerapan Chrome?
Berencana menggunakan API?Berencana menggunakan File System Access API di situs Anda? Bisakah HTML membaca file lokal?HTML 5 menyediakan cara standar untuk berinteraksi dengan file lokal dengan bantuan File API . File API memungkinkan interaksi dengan file tunggal, ganda, dan BLOB. FileReader API dapat digunakan untuk membaca file secara asinkron bekerja sama dengan penanganan event JavaScript.
Bagaimana cara membuka file lokal dalam HTML?HTML dapat digunakan untuk membuka folder dari penyimpanan lokal kami. Untuk membuka folder dari penyimpanan lokal kami, gunakan atribut 'HREF' dari HTML . Di atribut HREF, kami menentukan jalur folder kami.
Bagaimana cara menautkan file lokal dalam HTML?Anda perlu menggunakan file tersebut. /// protocol (ya, itu tiga garis miring) jika Anda ingin menautkan ke file lokal. Ini tidak akan pernah membuka file di aplikasi lokal Anda secara otomatis. Itu untuk alasan keamanan yang akan saya bahas di bagian terakhir. Jika terbuka, itu hanya akan terbuka di browser.
Bisakah situs web mengakses file lokal?Browser web (dan JavaScript) hanya dapat mengakses file lokal dengan izin pengguna . Untuk membakukan akses file dari browser, W3C menerbitkan HTML5 File API pada tahun 2014. Ini mendefinisikan cara mengakses dan mengunggah file lokal dengan objek file di aplikasi web. |