Думаю, сначала я продемонстрирую проблему на примере,
jsfiddle: http://jsfiddle.net/e2UfM/15/ (Протестировано с FF 12 и Chrome 18.0.1025.168)
Использование:
. Chrome, например, делает. Оба браузера обновляют содержимое файла.
Есть ли способ заставить Firefox обновить размер файла, как это делает Chrome в этой ситуации?
Пользователь выбирает файл, который слишком велик для формы, нажимает кнопку отправки и получает уведомление о том, что его файл слишком велик (через предупреждение, панель «размер» (см. ниже), и т. д.)
Они изменяют файл локально и снова нажимают «Отправить».
В Chrome обновляется размер файла. Когда пользователь снова нажмет кнопку отправки, он еще раз подтвердит обновленный размер и разрешит загрузку.В Firefox пользователь должен повторно выбрать файл в форме, прежде чем он увидит изменение размера файла.
Частичный обходной путь для Firefox — ответ @ZER0
Одной из целей File API является проверка размеров файлов на стороне клиента перед загрузкой на сервер. если я не ошибаюсь.
Рассмотрим сценарий, в котором в форме установлено ограничение на загрузку в 2 МБ, а пользователь выбирает файл размером 1 МБ. И Firefox, и Chrome увидят, что размер файла меньше 2 МБ, и добавят его в форму. Предположим также, что есть аккуратная полоса, которая показывает, насколько большой файл они выбрали, и соответствует ли он ограниченному размеру файла или нет:
Но затем пользователь решает внести небольшое изменение в содержимое этого файла локально. до того, как они отправят форму и превысят 2 МБ.
В Google Chrome я могу изящно справиться с этим на стороне клиента. Я могу снова проверить размер файла, когда пользователь отправляет форму, и убедиться, что он все еще меньше 1 МБ, прежде чем отправлять его на сервер. Но даже до того, как пользователь отправит форму, в Chrome я могу дойти до динамического обновления изображения маленькой полосы, поскольку они вносят локальные изменения как таковые:
Эта «полоса» (или любая другая форма мгновенного уведомления, такая как 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 . Спасибо!