Như đã đề cập trước đó, API FileSystem và File , cùng với API FileWriter , có thể được sử dụng để đọc và ghi tệp từ ngữ cảnh của tab / cửa sổ trình duyệt đến máy khách.
Có một số điều liên quan đến API FileSystem và FileWriter mà bạn cần biết, một số trong số đó đã được đề cập, nhưng đáng để nhắc lại:
- Việc triển khai API hiện chỉ tồn tại trong các trình duyệt dựa trên Chromium (Chrome & Opera)
- Cả hai API đã được gỡ khỏi theo dõi tiêu chuẩn W3C vào ngày 24 tháng 4 năm 2014 và cho đến nay là độc quyền
- Việc loại bỏ các API (hiện là độc quyền) khỏi các trình duyệt triển khai trong tương lai là một khả năng
- Một hộp cát (một vị trí trên đĩa bên ngoài các tệp có thể không tạo hiệu ứng) được sử dụng để lưu trữ các tệp được tạo bằng API
- Một hệ thống tệp ảo (cấu trúc thư mục không nhất thiết tồn tại trên đĩa ở dạng tương tự như khi truy cập từ trong trình duyệt) được sử dụng đại diện cho các tệp được tạo bằng API
Dưới đây là các ví dụ đơn giản về cách các API được sử dụng, trực tiếp và gián tiếp, song song để thực hiện những việc này:
Bánh nướng *
Viết tập tin:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Đọc tài liệu:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Sử dụng API tệp, FileWriter và FileSystem thô
Viết tập tin:
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
fileWriter.write(dataBlob);
}
fileEntry.createWriter(write);
}
directoryEntry.getFile(
"testFile",
{create: true, exclusive: true},
createFileWriter
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Đọc tài liệu:
function onQuotaRequestSuccess(grantedQuota)
{
function getfile(directoryEntry)
{
function readFile(fileEntry)
{
function read(file)
{
var fileReader = new FileReader();
fileReader.onload = function(){var fileData = fileReader.result};
fileReader.readAsText(file);
}
fileEntry.file(read);
}
directoryEntry.getFile(
"testFile",
{create: false},
readFile
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Mặc dù API FileSystem và FileWriter không còn trên đường chuẩn, nhưng theo tôi, việc sử dụng chúng có thể được biện minh trong một số trường hợp, bởi vì:
- Sự quan tâm mới từ các nhà cung cấp trình duyệt không triển khai có thể đặt họ lại ngay trên đó
- Tỷ lệ thâm nhập thị trường của các trình duyệt triển khai (dựa trên Chromium) cao
- Google (người đóng góp chính cho Chromium) đã không đưa ra và ngày kết thúc cho các API
Tuy nhiên, "một số trường hợp" có bao gồm chính bạn hay không, là do bạn quyết định.
* Bakedoods được duy trì bởi không ai khác ngoài anh chàng này ngay tại đây :)