4 回答

TA貢獻1863條經驗 獲得超2個贊
如前所述,FileSystem和File API以及FileWriter API可用于從瀏覽器選項卡/窗口的上下文讀取和寫入文件到客戶端計算機。
有一些與FileSystem和FileWriter API有關的事情,你應該知道,其中一些被提到,但值得重復:
API的實現目前僅存在于基于Chromium的瀏覽器(Chrome和Opera)中
這兩個API均于2014年4月24日從W3C標準軌道中刪除,截至目前為專有
從未來實現瀏覽器中刪除(現在的專有)API是可能的
甲沙箱(在磁盤上以外的位置,其中文件可以產生沒有影響)用于存儲與所述的API所創建的文件
使用虛擬文件系統(磁盤上不一定存在的目錄結構與從瀏覽器中訪問時所使用的形式相同)表示使用API創建的文件
以下是如何直接和間接使用API來執行以下操作的簡單示例:
寫文件:
bakedGoods.set({ data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}], storageTypes: ["fileSystem"], options: {fileSystem:{storageType: Window.PERSISTENT}}, complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}});
閱讀文件:
bakedGoods.get({ data: ["testFile"], storageTypes: ["fileSystem"], options: {fileSystem:{storageType: Window.PERSISTENT}}, complete: function(resultDataObj, byStorageTypeErrorObj){}});
使用原始文件,FileWriter和FileSystem API
寫文件:
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);
閱讀文件:
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);
雖然FileSystem和FileWriter API不再符合標準,但在我看來,在某些情況下,它們的使用是合理的,因為:
來自未實現的瀏覽器供應商的更新興趣可能會將它們重新置于其上
實施(基于Chromium)瀏覽器的市場滲透率很高
谷歌(Chromium的主要貢獻者)尚未給出API的生命終止日期
但是,“某些情況”是否包含您自己的情況,由您決定。
* BakedGoods由這個人維持正確:)

TA貢獻1934條經驗 獲得超2個贊
如果用戶選擇文件<input type="file">
,您可以使用File API 讀取和處理該文件。
設計不允許讀取或寫入任意文件。這違反了沙箱。來自維基百科 - > Javascript - >安全性:
JavaScript和DOM為惡意作者提供了通過Web在客戶端計算機上運行腳本的潛力。瀏覽器作者使用兩個限制包含此風險。首先,腳本在沙箱中運行,在沙箱中,腳本只能執行與Web相關的操作,而不能執行創建文件等通用編程任務 。
2016 UPDATE:直接訪問文件系統經由能夠文件系統API,這是僅由鉻和歌劇支持和可能最終沒有被實現為通過其他瀏覽器(與邊緣的例外)。有關詳細信息,請參閱Kevin的回答。
添加回答
舉報