Файловый API, Постоянная ссылка на локальный файл
В настоящее время я работаю над веб-сайтом script на основе игры (для переноса игры в Интернет).
Скрипты загружают данные с моего веб-хоста, поэтому загрузка идет медленно (приходится загружать каждый файл: карты, модели, текстуры,...).
Чтобы исправить это, я добавил параметр, который позволяет пользователям выбирать свои локальные данные игры на своем компьютере (используя File API - перетаскивание) для синтаксического анализа контента непосредственно из локального компьютера и предотвращения загрузки нескольких мегаданных из Интернета, результат невероятно быстрый.
Здесь проблема: каждый раз, когда они перезагружают браузер, они должны снова выбирать свои файлы снова и снова. Это не удобно.
Итак, есть ли способ сохранить ссылку из этого игрового архива, чтобы избежать повторного перетаскивания пользователя каждый раз? Я знаю о проблемах безопасности, просто хочу знать, есть ли что-то вроде постоянного URL.createObjectURL().
Примечание: игровые данные имеют значение ~ 2Go, поэтому его невозможно сохранить в API FileSystem (и я не хочу его копировать, это пространство для копирования, когда вы может просто сохранить ссылку на него).
Спасибо:)
Ответы
Ответ 1
У вас должен быть вход от пользователя
Невозможно получить доступ к файлам на клиентском компьютере без подтверждения пользователем. Как только пользователь выберет файл (вы можете прослушать его с событием change
), вы можете затем использовать FileReader API, например, чтобы прочитайте файл.
document.getElementById("input").addEventListener("change", function() {
const fs = new FileReader();
fs.readAsText(this.files[0]);
fs.onloadend = function() {
document.getElementById("output").innerText = fs.result;
}
});
<input id="input" type="file" />
<div id="output"></div>
Ответ 2
Возможно, вам захочется использовать IndexedDB. Он поддерживается в последних браузерах, включая Chrome, Firefox и Safari (macOS и iOS). IndexedDB позволяет сохранять Blob
, File
или ArrayBuffer
как значения в хранилище объектов IndexedDB.
Проверьте IndexedDB: сохраните файл как файл или Blob или ArrayBuffer. Каков наилучший вариант?.