Понимание модели безопасности Flash Player 10 для загрузки файлов

Я читал об ограничениях безопасности для загрузки файлов в Flash Player 10. Согласно файлам документов FileReference для загрузки(), загрузка не требуется быть вызвано действием, инициированным пользователем (функция просмотра(), но эта другая история). Если бы это было так, это создало бы неудобный пользовательский опыт для многофайловых загрузок, так как только одна загрузка может произойти сразу - поэтому пользователю нужно будет щелкнуть (или нажать кнопку) один раз на файл, чтобы инициировать загрузку, но только когда предыдущий файл завершил загрузку.

Документация для URLLoader.load(), с другой стороны, указывает:

В Flash Player 10 и более поздних версиях, если вы используете многостраничный Content-Type (для пример "multipart/form-data" ), который содержит загрузку (указанную Параметр "filename" в заголовке "content-disposition" в POST тело), ​​операция POST подчиняется правилам безопасности, применяемым к загрузки:

Операция POST должна выполняться в ответ на инициированный пользователем действия, такие как щелчок мышью или нажатие клавиши.

Эта статья Flash Security подтверждает документацию по URLLoader (см. раздел "API POST" ).

Однако в оригинальной технической документации не указывается это - только просмотр в FileReference должен выполняться в ответ на инициированное пользователем действие, а не (потенциально URLLoader -driven) загружать себя:

Когда SWF файл использует FileReference.browse() и Методы FileReference.upload() для загрузки файла на сервер, Flash Игрок применяет два правила безопасности:

  • FileReference.browse() должен вызываться из обработчика пользовательского события (событие мыши или клавиатуры).

[...]

Flash Player применяет эти же правила в любое время сетевой API вызывается для выполнения POST, который появляется на сервере для добавления загрузки.

Насколько я могу судить по фактическому использованию API-интерфейса URLLoader для загрузки файла, загрузка действительно не требуется из инициированного пользователем действия; но, это потому, что я использую отладочную версию проигрывателя, или потому, что документация неверна? (Или что-то еще?)

TL; DR: Документация содержит противоречивую информацию, и я не доверяю моим полевым испытаниям (перед лицом документов, которые говорят, что они не должны работать). Может ли URLLoader использоваться для загрузки файла без взаимодействия с пользователем? Или только FileReference? (Это убьет большинство возможностей предварительной обработки файлов, и это то, что мне интересно делать!)

Ответ 1

У вас нет ошибок, потому что вы работаете в отладке. У меня такая же проблема, работая над моим проектом speedtest.
Итак, для вопросов:

  • FileReference не может загружать файлы без участия пользователя.

  • URLLoader не может загружать файлы без взаимодействия с пользователем, если вы используете свойства POST, multipart/form-data и filename.

  • Вы можете загружать файлы с помощью URLLoader, если вы используете контент-тип типа application/octet-stream и помещаете тело файла в кодировку (например, в base64) в свой пост-запрос. Это означает, что если вы используете PHP, вы будете работать не с $_FILES, а с массивом $_POST, чтобы получить свой файл.

  • Работа в режиме отладки на локальном компьютере не приведет к ошибке ограничения URLLoader.

Ответ 2

Я считаю, что Adobe хочет иметь его, чтобы вы не могли использовать URLLoader для загрузки файла без взаимодействия. Я просто думаю, что им не удалось сделать это наилучшим образом, и вы можете обойти его в зависимости от того, как именно вы используете URLLoader для загрузки файла (если вы поместите имя файла в POST для URLLoader, он должен ошибиться, но вы можете обойти это, используя Base64, кодируя файл и отправляя его с URLLoader на php).

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