Misalkan Anda memiliki aplikasi pengeditan foto dan ingin pengguna dapat menarik ratusan foto dan menyalinnya ke aplikasi Anda. Jadi, apa yang akan Anda lakukan?
Dalam postingan terbaru, Eiji Kitamura menyoroti fitur baru yang halus, tetapi canggih di API tarik lalu lepas; kemampuan untuk menarik folder dan mengambilnya sebagai objek FileEntry
dan DirectoryEntry
HTML5 Filesystem API (dilakukan dengan mengakses metode baru di DataTransferItem, .webkitGetAsEntry()
).
Yang sangat keren dari ekstensi .webkitGetAsEntry()
adalah cara elegannya dalam mengimpor file dan seluruh folder. Setelah Anda memiliki FileEntry
atau DirectoryEntry
dari peristiwa drop, Anda hanya perlu menggunakan copyTo()
Filesystem API untuk mengimpornya ke aplikasi Anda.
Contoh menyalin beberapa folder yang dijatuhkan ke sistem file:
var fs = null; // Cache filesystem for later.
// Not shown: setup drag and drop event listeners.
function onDrop(e) {
e.preventDefault();
e.stopPropagation();
var items = e.dataTransfer.items;
for (var i = 0, item; item = items[i]; ++i) {
var entry = item.webkitGetAsEntry();
// Folder? Copy the DirectoryEntry over to our local filesystem.
if (entry.isDirectory) {
entry.copyTo(fs.root, null, function(copiedEntry) {
// ...
}, onError);
}
}
}
window.webkitRequestFileSystem(TEMPORARY, 1024 * 1204, function(fileSystem) {
fs = fileSystem;
}, function(e) {
console.log('Error', e);
});
Bagus sekali! Sekali lagi, kesederhanaan berasal dari integrasi DnD dengan panggilan Filesystem API.
Lebih jauh lagi, kita juga dapat menarik lalu melepas folder dan/atau file ke <input type="file">
normal, lalu mengakses entri sebagai direktori Filesystem atau entri file. Hal ini dilakukan melalui .webkitEntries
:
<input type="file" multiple>
function onChange(e) {
e.stopPropagation();
e.preventDefault();
var entries = e.target.webkitEntries; // Get all dropped items as FS API entries.
[].forEach.call(entries, function(entry) {
// Copy the entry into our local filesystem.
entry.copyTo(fs.root, null, function(copiedEntry) {
...
}, onError);
});
}
document.querySelector('input[type="file"]').addEventListener('change', onChange);
Saya telah membuat demo galeri foto untuk menunjukkan berbagai teknik ini dalam mengimpor file/folder.
Untuk mempelajari HTML5 Filesystem API lebih lanjut, lihat Menjelajahi Filesystem API.