propiedad flex firefox file upload

flex - propiedad order css



¿Cómo hago que la carga de archivos Flex funcione en Firefox y Safari? (10)

Tengo una aplicación flexible que carga archivos a un servidor. El servidor requiere autenticación para poder cargar. En IE, la carga funciona bien. Sin embargo, en FF y Safari, no se carga. He visto gente por todas partes con este mismo problema pero sin respuestas. No me falles ahora stackoverflowers.


El problema al menos en Firefox es que las cookies de sesión no se envían en la solicitud cuando se invoca FileReference.upload (). Lo que debe hacer es agregar el token de autenticación como una variable de formulario o en la cadena de consulta. Aquí hay un ejemplo en Java donde la cookie de sesión se llama "jsessionid"

var request : URLRequset = new URLRequest( uploadUrl + ";jsessionid=" + jsessionid);

Puede analizar el jsessionid de las cookies utilizando Javascript y ExternalInterface para invocar la función Javascript. O bien, después de autenticarse, puede hacer que Flex invoque un método de backend que devuelva el ID de sesión actual.

El error relacionado de Flex está aquí:

http://bugs.adobe.com/jira/browse/FP-201


Este es un error real del reproductor flash . Tal vez este enlace te dará algunas ideas.

¿Qué tienes del lado del servidor? Tal vez podría agregar el sessionid como parámetro en su solicitud.


Parece que esto es bastante viejo, pero recientemente encontré este problema también. Mi solución (que está lejos de ser óptima) en una configuración de rieles autenticados Flex + era desactivar la autenticación basada en la sesión en el script de carga.

Como realmente quería al menos una autenticación básica, guardé el nombre de usuario y la contraseña con los que el usuario inició sesión, y escribí el código para enviar / validar eso manualmente en el lado de los rieles. Nunca pude hacer funcionar el truco "jsessionid", ya que el flash no tiene acceso a las sesiones del navegador.

Espero que esto ayude a alguien a ahorrar un poco de tiempo.


Encontré esta pregunta al intentar encontrar la respuesta yo mismo. La solución fue bastante simple.

Basado en el error de Flash Player que otros han vinculado, y los comentarios en esa página, decidí agregar identificadores de sesión a mi URL de carga y darle una oportunidad. ¡Realmente fue así de fácil!

Para que funcione, comencé agregando un parámetro flashVar llamado sessionParams. Esto me permitió pasar cualquier cadena que desee al reproductor flash como mi identificador de sesión, y luego se adjuntará a la URL utilizada para cargar.

//sessionParams - resolves firefox upload bug public var sessionParams:String = ""; //... public function initApp():void{ sessionParams = Application.application.parameters.sessionParams; }

En mi caso, estoy en ColdFusion con sesiones java habilitadas, por lo que mis sessionParams se configuran de la siguiente manera antes de pasar al reproductor flash:

<cfset flashVars = "sessionParams=#urlEncodedFormat(''jsessionid='' & session.sessionid)#" />

No olvides escapar caracteres especiales como =, &, etc. (que he hecho con urlEncodedFormat), para que sean tratados como parte del valor del parámetro "sessionParams" y no como puntos de interrupción para indicar otros parámetros. Está incorporando información de URL futura en la URL actual.

Luego, use el valor de sessionParams en su código de carga. Aquí hay un fragmento de cómo configuro el mío:

// Set Up URLRequest _uploadURL = new URLRequest; _uploadURL.url = _url + "?" + _sessionParams; _uploadURL.method = "GET"; _uploadURL.data = _variables; _uploadURL.contentType = "multipart/form-data";

Los nombres de las variables son diferentes (pero similares) porque es parte de una clase reutilizable.

Espero que eso te ayude. Si no, avíseme y trataré de proporcionarle más código o una explicación para ayudarlo.


Resolví este problema. La carga de archivos con flexión funcionará en todos los navegadores. En la aplicación J2ee,

Comente la restricción de seguridad o haga que la URL fileupload.do desprotegida en web.xml donde colocará el código real.

<security-constraint> <display-name>Senusion Security Constraint</display-name> <web-resource-collection> <web-resource-name>Un Protected Area</web-resource-name> <url-pattern>/fileupload.do</url-pattern> </web-resource-collection> </security-constraint>

Espero que esto ayude al próximo lector.


FlashPlayer 10 proporciona una nueva API de Filereference que puede ayudar mucho. Aquí hay una entrada de blog que lo describe: http://www.flexpasta.com/index.php/2010/02/21/uploading-files-with-firefox-solution/ .

De hecho, en Flash 10, una mejora de flash.net.FileReference hace posible leer el contenido de un archivo antes de que se cargue. Lo que significa que el archivo se puede cargar de diferentes maneras y luego se puede hacer en Flash 9. El siguiente ejemplo muestra cómo la carga fácil de archivos puede ser y no está vinculada a SSL, Firefox, IE, Chrome, etc.


Me las arreglé para solucionar este error usando el filtro web flex y java

Código Flex:

var urlVars:URLVariables = new URLVariables(); urlVars.jsessionid = sessionID; var uploadUrl:String = "http://localhost:8080/mywar;jsessionid="+sessionID; uploadUrl += "?"+getClientCookies(); //put all client cookies on the query string var urlRequest:URLRequest = new URLRequest(uploadUrl); urlRequest.method = URLRequestMethod.POST; urlRequest.data = urlVars; //will go first time and get the cookies set see flex docs var testUpload:Boolean = true; fileRef.upload(urlRequest,"Filedata",testUpload);

CÓDIGO JAVA:

package com.mywar.fileupload; import java.io.IOException; import java.util.Enumeration; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author orasio - spieler * This filter comes to solve the Firefox ,Chrome and SAFARI file upload issue * The problem was that the file uploaded by the flex * FileReference came with a different session and no cookies * To solve this problem do the following : * * * don''t forget to add this filter to the web.xml file */ public class FileUploadFilter implements Filter { private static final String CONTENT_LENGTH = "content-length"; private static final String UPLOAD_SITE_PATH = "/"; private static final String JSESSIONID = "JSESSIONID"; @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { if ((request instanceof HttpServletRequest) && (response instanceof HttpServletResponse)) { HttpServletRequest httpRequest = (HttpServletRequest) request; //httpRequest.getHeader("user-agent"); //Shockwave Flash String contentLength = httpRequest.getHeader(CONTENT_LENGTH); boolean isFlexTest = (contentLength!=null && Integer.parseInt(contentLength)==0); if(isFlexTest){ HttpServletResponse httpResponse = (HttpServletResponse) response; setAllClientCookie((HttpServletResponse)response, httpRequest); PrintWriter out = httpResponse.getWriter(); out.println("OK"); out.close(); return; } } filterChain.doFilter(request, response); } /* * write all cookies back to the flex test response */ @SuppressWarnings("unchecked") private void setAllClientCookie(HttpServletResponse httpResponse, HttpServletRequest httpRequest) { Enumeration<String> parameterNames = (Enumeration<String>)httpRequest.getParameterNames(); while (parameterNames.hasMoreElements()) { String cookieName = (String) parameterNames.nextElement(); //since we get IllegalArgumentException: Cookie name "JSESSIONID" is a reserved token if(!cookieName.contains(JSESSIONID)) { Cookie cookie = new Cookie(cookieName, httpRequest.getParameter(cookieName)); cookie.setPath(UPLOAD_SITE_PATH); httpResponse.addCookie(cookie); } } } @Override public void destroy() { } }


Algunas veces, incluso si enviamos las cookies a través de la URL, no funcionará. Esto se debe a que Flex está bloqueando la solicitud de carga de archivos.

Para desbloquearlo, debes instalar el certificado SSL y luego probarlo.

Si alguien tiene alguna otra respuesta, por favor avíseme.


Enfrenté el mismo problema. La carga de archivos funcionaba en todos los navegadores excepto en Firefox. En Firefox, el error # 2038 estaba siendo lanzado mientras se cargaba el archivo. La aplicación usó SSL. En mi caso, incluso la solicitud de carga no se generaba desde Firefox, lo cual pude confirmar al ver en el panel Net de Firebug, la URL de carga no estaba siendo golpeada. Eso significa que puede ser el tiempo de ejecución de flash en Firefox bloqueando la solicitud de carga. Sin embargo, cuando ejecuté la aplicación en IE, instalé el certificado autofirmado de la aplicación en IE, cargué el archivo de forma ambigua y, por supuesto, increíblemente, comencé a trabajar en Firefox. Primero, compruebe si se llega al servidor o si se bloquea la solicitud. el cliente.

Gracias


Como estaba creando una aplicación Flash para Facebook, no tenía acceso a jsessionid.

Resolví este problema subiéndolo a una dirección HTTPS en lugar de a HTTP .

Una cosa que me causó problemas es que en OSX Firefox y Safari (no en Chrome), el (FileReferenceInstance) .type es nulo y el (FileReferenceInstance) .name viene con la extensión completa (myimage.jpg).