В настоящее время файлы могут записываться и считываться из контекста вкладки / окна браузера с помощью API File , FileWriter и FileSystem , хотя предостережения по их использованию (см. хвост этого ответа).
Но чтобы ответить на ваш вопрос:
Использование BakedGoods *
Записать файл:
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){}
});
Использование необработанных API-интерфейсов File, FileWriter и FileSystem
Записать файл:
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);
Только то, что вы просили правильно? Может быть, а может и нет. Последние два API:
- В настоящее время реализованы только в браузерах на базе Chromium (Chrome & Opera)
- Удалены из стандартов W3C, и на данный момент являются проприетарными API
- Может быть удалено из реализующих браузеров в будущем
- Ограничить создание файлов в песочнице (место, вне которого файлы не могут оказать никакого эффекта) на диске
Кроме того, в спецификации FileSystem нет указаний о том, как структуры каталогов должны отображаться на диске. Например, в браузерах на основе Chrom в изолированной программной среде есть виртуальная файловая система (структура каталогов, которая не обязательно существует на диске в той же форме, что и при доступе из браузера), в которой каталоги и файлы, созданные с помощью API, помещаются.
Таким образом, хотя вы можете записывать файлы в систему с помощью API, поиск файлов без API (ну, без API FileSystem) может быть нетривиальным делом.
Если вы можете справиться с этими проблемами / ограничениями, эти API-интерфейсы являются практически единственным родным способом сделать то, что вы просили.
Если вы открыты для неродных решений, Silverlight также позволяет вводить / выводить файлы из конкурса вкладок / окон через IsolatedStorage . Однако для использования этой возможности требуется управляемый код ; решение, которое требует написания такого кода, выходит за рамки этого вопроса.
Конечно, решение, которое использует дополнительный управляемый код, оставляя для написания только Javascript, вполне в рамках этого вопроса;):
//Write file to first of either FileSystem or IsolatedStorage
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem", "silverlight"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
* BakedGoods - это библиотека Javascript, которая устанавливает единый интерфейс, который можно использовать для выполнения общих операций хранения во всех собственных и некоторых не собственных средствах хранения. Это поддерживается этим парнем прямо здесь:).