FileAPI не обновляет размер файлов, когда пользователь вносит изменения в файлы (браузеры, не поддерживающие WebKit)

Думаю, сначала я продемонстрирую проблему на примере,

jsfiddle: http://jsfiddle.net/e2UfM/15/ (Протестировано с FF 12 и Chrome 18.0.1025.168)

Использование:

  • Загрузите текстовый файл с локального компьютера.
  • Нажмите «загрузить файл».
  • Нажмите «отобразить размер файла» — обратите внимание на размер.
  • измените и сохраните текстовый файл на локальном компьютере.
  • Еще раз нажмите «отобразить размер файла». Обратите внимание, как в браузерах webkit (Chrome) размер файла изменяется, но в Firefox размер файла не обновляется

. Chrome, например, делает. Оба браузера обновляют содержимое файла.

Есть ли способ заставить Firefox обновить размер файла, как это делает Chrome в этой ситуации?


Простой пример из реальной жизни:

Пользователь выбирает файл, который слишком велик для формы, нажимает кнопку отправки и получает уведомление о том, что его файл слишком велик (через предупреждение, панель «размер» (см. ниже), и т. д.)

Они изменяют файл локально и снова нажимают «Отправить».

В Chrome обновляется размер файла. Когда пользователь снова нажмет кнопку отправки, он еще раз подтвердит обновленный размер и разрешит загрузку.В Firefox пользователь должен повторно выбрать файл в форме, прежде чем он увидит изменение размера файла.

Частичный обходной путь для Firefox — ответ @ZER0


Пример из реальной жизни (подробно):

Одной из целей File API является проверка размеров файлов на стороне клиента перед загрузкой на сервер. если я не ошибаюсь.

Рассмотрим сценарий, в котором в форме установлено ограничение на загрузку в 2 МБ, а пользователь выбирает файл размером 1 МБ. И Firefox, и Chrome увидят, что размер файла меньше 2 МБ, и добавят его в форму. Предположим также, что есть аккуратная полоса, которая показывает, насколько большой файл они выбрали, и соответствует ли он ограниченному размеру файла или нет:

The 1MB file that the user has chosen!

Но затем пользователь решает внести небольшое изменение в содержимое этого файла локально. до того, как они отправят форму и превысят 2 МБ.

В Google Chrome я могу изящно справиться с этим на стороне клиента. Я могу снова проверить размер файла, когда пользователь отправляет форму, и убедиться, что он все еще меньше 1 МБ, прежде чем отправлять его на сервер. Но даже до того, как пользователь отправит форму, в Chrome я могу дойти до динамического обновления изображения маленькой полосы, поскольку они вносят локальные изменения как таковые:

Now the file is over 2MB, bad!

Эта «полоса» (или любая другая форма мгновенного уведомления, такая как alert) полезно, если пользователь заполняет большую форму. Я хотел бы, чтобы пользователь сразу знал, когда его файл слишком велик, и чтобы он мог исправить его тогда, а не только при отправке формы.

В Firefox, поскольку размер файла никогда не обновляется, он с радостью загрузит файл размером 2 МБ, думая, что он по-прежнему составляет 1 МБ! Я использую логику на стороне сервера, чтобы дважды проверить размер файла, но я бы предпочел сэкономить на поездке на сервер.


Как я столкнулся с ошибкой:

Приведенные выше примеры относятся к большему количеству людей, поскольку больше людей, вероятно, имеют дело с загрузкой файлов в формы по сравнению с использованием функции среза в File API. Это конкретно то, как я сталкиваюсь с проблемой.

В моей форме пользователь выбирает файл, и когда он нажимает кнопку «Отправить», на экране отображаются только последние 10 000 байтов в текстовой области, чтобы подтвердить, что это действительно тот файл, который ему нужен.

Рассмотрим файл размером 50 000байт. Пользователь выбирает его в форме, и Chrome и Firefox отображают байты 40 000–50 000в текстовой области .

Теперь пользователь добавляет содержимое в файл и увеличивает размер того же файла до 70 000байт!

Google Chrome корректно обновит текстовую область, чтобы она содержала байты 60 000–70 000. В Firefox, поскольку размер останется постоянным, он по-прежнему будет отображать только байты в диапазоне 40,000-50,000.


Редактировать: Обновлен jsfiddle, чтобы продемонстрировать, что FF все еще может читать обновленное содержимое файла. Просто размер файла не меняется с этим новым содержимым.

Изменить:https://bugzilla.mozilla.org/show_bug.cgi?id=756503(отчет об ошибке)

Редактировать:Примеры были добавлены и обновлены в ответ на комментарий @Eduárd Moldován и ответ @ZER0 . Спасибо!

8
задан 17 revs 23 May 2017 в 12:00
поделиться