Как сделать кеширование/управление многими большими файлами (видео) на пользовательском компьютере через механизмы браузера (плагины являются приемлемыми решениями). Из того, что я могу сказать, локальное хранилище связано с данными типа базы данных, а не с файлами.
Можете ли вы использовать локальное хранилище HTML5 для хранения файла? Если нет, то как?
Ответ 1
API FileSystem [1,2] будет лучшим выбором в будущем, и в какой-то момент это было очень кровоточащим краем. Однако он был оставлен w3c. Из собственной документации:
Работа над этим документом была прекращена, и на нее не следует ссылаться или использоваться в качестве основы для реализации.
Ответ 2
API-интерфейс HTML5 FileSystem мертв, как говорили другие. Другим вариантом является IndexedDB. См. здесь.
Ответ 3
Ответ на этот вопрос зависит от ваших ответов на следующие вопросы:
- Вы в порядке с тем, что поддержка записи файлов в настоящее время существует только в браузерах на основе Chrome (Chrome и Opera)?
- Вы в порядке с использованием API-интерфейсов as-of-now, чтобы воспользоваться такой возможностью?
- Вы в порядке с возможностью удаления указанного API в будущем?
- Вы в порядке с сужением файлов, созданных с указанным API, на песочницу (место, за пределами которого файлы не могут повлиять) на диске?
- Вы в порядке с использованием виртуальной файловой системы (структура каталогов, которая не обязательно существует на диске в той же форме, что и при доступе из браузера) для представления таких файлов?
Если вы ответили "да" на все вышеперечисленное, затем File, FileWriter и FileSystem, вы можете читать и записывать файлы из контекста вкладки/окна браузера, используя Javascript.
Вот простые примеры того, как API используются, прямо или косвенно, в тандеме, чтобы делать такие вещи:
Записать файл:
//"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){}
});
Использование необработанных файлов, API FileWriter и FileSystem
Записать файл:
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);
Так как вы также открыты для не-родных (plug-in based) решений, вы можете воспользоваться возможностью ввода/вывода файлов в Silverlight в IsolatedStorage, доступ к которому предоставляется через Silverlight.
IsolStorage во многом похожа на FileSystem, в частности, она также существует в песочнице и использует виртуальную файловую систему. Однако управляемый код необходим для использования этого средства; решение, требующее написания такого кода, выходит за рамки этого вопроса.
Конечно, решение, которое использует дополнительный управляемый код, оставляя его только с 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 поддерживается не кем иным, как этим парнем прямо здесь:)
Ответ 4
В настоящее время локальное хранилище HTML5 ограничено 5 МБ по умолчанию в большинстве реализаций. Я не думаю, что вы можете хранить там много видео.
Источник: https://web.archive.org/web/20120714114208/http://diveintohtml5.info/storage.html
Ответ 5
Хорошо объясняется большая часть локального хранилища html5.
здесь fooobar.com/questions/256295/... был аналогичный вопрос, а не о видео, но если вы можете добавить xml в локальное хранилище.
Я упомянул статью в своем ответе в статье. javascript используется для синтаксического анализа xml для локального хранилища и для его запроса в автономном режиме.
Можете помочь вам.
Ответ 6
FSO.js обернет вам API-интерфейс HTML5 FileSystem, что упростит хранение, управление и управление наборами больших файлов в изолированная файловая система.