Периодически регистрируйте содержимое файла, используя setInterval и FileReader.
Я прикрепляю эту часть к <input type="file">
элемент как обработчик "onclick":
handleWatch(event) {
event.preventDefault();
const file = event.target.files[0];
if (!file) {
return;
}
const reader = new FileReader();
setInterval(() => {
reader.onload = async function(e) {
const content = e.target.result;
const lines = content.split('\n').filter((line) => {
return !line.beginsWith('#') && !(line === "");
});
const nLines = lines.length - 1;
console.log("number of lines in file: " + nLines);
}
reader.readAsText(file, 'UTF-8');
}, 1500);
}
Идея состоит в том, чтобы создать регистратор, который периодически проверяет содержимое файла (выбранного пользователем) на наличие изменений и сохраняет его в БД (этот код удален для ясности). Интервальное выполнение работает (регистрируется на консоли), до того момента, когда содержимое действительно изменяется, тогда ни одна из инструкций внутри reader.onload не выполняется.
1 ответ
Из спецификации FileAPI вы можете прочитать здесь: https://www.w3.org/TR/FileAPI/
Важные соображения безопасности включают предотвращение злонамеренных атак выбора файлов (циклы выбора), предотвращение доступа к системно-чувствительным файлам и защита от изменений файлов на диске после выбора.
Поскольку этот раздел носит информативный характер, возможно, эта функция безопасности реализована не во всех браузерах. Кажется, браузер, который вы используете, соответствует спецификации (и я думаю, что все так).
Мы также можем прочитать это:
Это нетривиальное требование для реализации для пользовательских агентов, и поэтому оно не является обязательным, а обязательным [RFC2119]. Пользовательские агенты должны стремиться к тому, чтобы состояние моментального снимка объекта File было установлено в состояние основного хранилища на диске во время получения ссылки. Если файл изменяется на диске после того, как была взята ссылка, состояние моментального снимка файла будет отличаться от состояния основного хранилища. Пользовательские агенты могут использовать метки времени модификации и другие механизмы для поддержания состояния моментального снимка, но это оставлено в качестве детали реализации.
Таким образом, даже браузер не блокировал вас после изменения файла, тогда вы получите снимок файла, когда пользователь выберет файл.