Можно ли использовать локальное хранилище HTML5 для хранения файла? Если нет, то как?
Как можно кэшировать / управлять многими большими файлами (видео) на компьютере пользователя с помощью механизмов браузера (Плагины являются приемлемыми решениями). От того, что я могу сказать, локальное хранилище данных типа базы данных, а не файлов.
6 ответов
API файловой системы[1,2] будет вашим лучшим выбором в будущем, в какой-то момент это был очень кровоточащий край. Однако он был оставлен w3c. Из собственной документации:
работа над этим документом была прекращена и он не должен ссылаться или использовать в качестве основы для реализация.
HTML5 FileSystem API мертв, как говорили другие. Другой вариант-IndexedDB. См.здесь.
ответ на этот вопрос зависит от ответов на следующие вопросы:
- вы в порядке с тем, что поддержка записи файлов в настоящее время существует только в браузерах на основе хрома (Chrome & Opera)?
- вы в порядке с использованием в настоящее время проприетарного API, чтобы воспользоваться такой capbility?
- вы в порядке с возможностью удаления указанного API в будущем?
- вы в порядке с сужением файлы, созданные с помощью указанного API для песочница (место, за пределами которого файлы не могут произвести никакого эффекта) на диске?
- вы в порядке с использованием виртуальная файловая система (структура каталогов, которая не обязательно существует на диске в той же форме, что и при доступе из браузера) для представления таких файлов?
если вы ответили "да" на все вышеперечисленное, то с , FileWriter и файловой системы API, вы можете читать и писать файлы из контекста вкладки/окна браузера с помощью Javascript.
вот простые примеры того, как Апис используются, прямо и косвенно, в тандеме, чтобы сделать эти вещи:
пишем файл:
//"SGVsbG8gd29ybGQh" is "Hello world!" encoded in Base64; raw binary data can
//also be written with the use of Typed Arrays and the appropriate mime type
bakedGoods.set({
data: [{key: "testFile", value: "SGVsbG8gd29ybGQh", 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){}
});
использование raw-файла, FileWriter и файловой системы Апис
пишем файл:
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
//"SGVsbG8gd29ybGQh" is "Hello world!" encoded in Base64;
//raw binary data can also be written with the use of
//Typed Arrays and the appropriate mime type
var dataBlob = new Blob(["SGVsbG8gd29ybGQh"], {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);
поскольку вы также открыты для неродных (на основе плагинов) решений, вы можете воспользоваться файловым вводом-выводом, включенным Silverlight в IsolatedStorage, доступ к которому обеспечивается через Silverlight.
IsolatedStorage похож во многих аспектах на файловую систему, в частности, он также существует в песочнице и использует виртуальную файловую систему. Однако, управляемого кода требуется использовать это средство; решение, которое требует написания такого кода, выходит за рамки этого вопроса.
конечно, решение, которое использует дополнительный управляемый код, оставляя только Javascript для записи, хорошо в рамках этого вопроса ;):
//Write file to first of either FileSystem or IsolatedStorage
bakedGoods.set({
data: [{key: "testFile", value: "SGVsbG8gd29ybGQh", dataFormat: "text/plain"}],
storageTypes: ["fileSystem", "silverlight"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
*BakedGoods поддерживается не кем иным, как этим парнем прямо здесь:)
локальное хранилище HTML5 в настоящее время ограничено 5 МБ по умолчанию в большинстве реализаций. Не думаю, что там можно хранить много видео.
источник: https://web.archive.org/web/20120714114208/http://diveintohtml5.info/storage.html
Ну, большинство частей локального хранилища html5 объясняется выше.
здесь https://stackoverflow.com/a/11272187/1460465 был аналогичный вопрос, не о видео, но если вы можете добавить xml в локальное хранилище.
Я упомянул статью в своем ответе в статье javascript используется для анализа xml в локальное хранилище и как запросить его в автономном режиме.
может помочь вам.
FSO.js обернет API файловой системы HTML5 для вас, что позволит вам легко хранить, управлять и манипулировать наборами больших файлов в изолированной файловой системе.