Python (с Tweepy) просматривает архив твитов и выполняет действия с каждым

У них действительно есть разные поведения в отношении файлов, которые модифицируются на диске после выбора пользователя, а IIRC это поведение даже изменяется на разных ОС. (Этот ответ основан только на наблюдениях, выполненных в системе macOS, которые могут не совпадать с вашим)

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

Чтобы сделать его более визуальным, давайте возьмем содержимое файла при выборе пользователя:

abcdefghijklmnopqrstuvwxyz

Когда Firefox запросит метаданные Файла, ОС сообщит об этом size: 26.

Теперь, давайте изменим содержимое этого файла на

abc

. Если мы попытаемся прочитайте этот файл через FileReader, FF будет использовать метаданные, предоставленные ОС (размер: 26). Поэтому он попытается прочитать до 26-го байта этого файла. Очевидно, это не работает ... И это ваш , почему .


Итак, теперь, «как исправить это»?

Ну , это зависит от того, что вы подразумеваете под этим ... Если вы хотите иметь поведение Chrome в Firefox, вы можете получить файл на диске, используя blobURI adn AJAX, загрузив его с диска на память и, следовательно, с новыми метаданными.

Но будьте осторожны, это не сработает в Safari, который сам создает blobURI из выбранных файлов, но который не позволит нам извлекать его как новый на диск, если он был изменен. ..

Другое, более уродливое обходное решение taht предоставило бы вам только файл «как было», когда пользователь выбрал его, было бы создать его копию в памяти (я думаю, что FileReader.readAsArrayBuffer является наиболее кросс-браузерный способ сделать это). Но если ваш пользователь изменил его, они могут быть разочарованы тем, что их изменения не отражаются.

Поэтому, возможно, лучшим решением является просто обработать эту ошибку и предоставить пользователю сообщение, объясняющее им, что плохо изменить файл, который уже был выбран, и предложить им снова выбрать его.

Ps: Высоко связанный

0
задан Eugenijus Krenis 19 January 2019 в 20:42
поделиться