He estado leyendo sobre las restricciones de seguridad para las cargas de archivos en Flash Player 10. De acuerdo con FileReference docs for upload(), la carga no tiene que ser activada por una acción iniciada por el usuario (el browse() sí, pero esa es otra historia). Si lo hiciera, eso forzaría una experiencia de usuario incómoda para cargas múltiples, ya que solo una carga puede ocurrir a la vez, por lo que el usuario tendría que hacer clic (o presionar un botón) una vez por archivo para iniciar la carga, pero solo cuando el archivo anterior había terminado de cargarse.Comprensión del modelo de seguridad de Flash Player 10 para carga de archivos
El documentation for URLLoader.load(), por el contrario, afirma:
En Flash Player 10 y posterior, si se utiliza un multiparte Content-Type (por ejemplo "multipart/form-data") que contiene una subida (indicado por un parámetro "nombre de archivo" en una "Content-Disposition" de cabecera dentro del cuerpo de POST ), la operación POST es sujeta a las normas de seguridad aplicadas a cargas:
debe ser llevado a cabo la operación POST en respuesta a un usuario -iniciado acción, como un clic del mouse o presionar la tecla.
This Flash Security article corrobora la documentación URLLoader (véase la sección "API post").
El original whitepaper, sin embargo, no indica esto - sólo que una FileReference de exploración debe ser en respuesta a una acción iniciada por el usuario, no el (potencialmente URLLoader impulsado-) subir en sí:
Cuando un archivo SWF utiliza el FileReference.browse() y FileReference.upload() para cargar un archivo a un servidor, flash jugador hace cumplir dos reglas de seguridad:
- Se debe llamar a FileReference.browse() desde un controlador de evento de usuario (evento de mouse o teclado).
[...]
Flash Player hace cumplir estas mismas reglas en cualquier momento una API de red está llamado a desempeñar un puesto que parece que el servidor para contener una carga.
Por lo que yo puedo decir por el uso real de la API URLLoader para cargar un archivo, los archivos de hecho no deben provenir de una acción iniciada por el usuario; pero, ¿esto es porque estoy usando una versión de depuración del reproductor o porque la documentación es incorrecta? (¿O algo más?)
TL; DR: La documentación contiene información contradictoria, y no confío en mis pruebas de campo (frente a los documentos que dicen que no deberían funcionar). ¿Se puede usar URLLoader para cargar un archivo sin interacción del usuario? ¿O solo FileReference? (Eso mataría a la mayoría de las posibilidades de preprocesamiento de archivos, que es lo que estoy interesado en hacer!)
¡Ah, es por el reproductor Debug! Pero, hasta donde yo sé, FileReference * puede * cargar archivos sin la interacción del usuario (simplemente no puede * explorar * para ellos). Odio los dobles estándares. – Cameron
Como ha publicado en su pregunta, y de acuerdo con adobe.com, 'FileReference.browse()' debe invocarse antes de 'FileReference.Upload()'. – Den
Sí, entiendo :-) Pero imagine que el usuario hace clic en un botón "examinar" y selecciona 17 archivos a través de una 'FileReferenceList'. Esos 17 archivos pueden cargarse sin más interacción del usuario. Pero, si queremos modificarlos de alguna manera antes de subirlos (digamos, cambiar el tamaño de los archivos de imagen en el cliente), entonces el usuario tendría que hacer clic 17 veces más, una para iniciar cada carga (URLLoader). Eso es lo que quise decir con un doble rasero. Por supuesto, en realidad * nadie * forzará a sus usuarios a hacer clic 17 veces cuando hay soluciones temporales aceptables (como la codificación Base64). – Cameron