Uploadify - Problemas más comunes

Cada vez que un error ocurre se dispara el evento OnCancel.
El texto del mensaje de error está disponible en la propiedad del control Error.

A continuación se muestran los errores más comunes y sus causas.

  • Error 404
    El servicio que maneja las cargas no se encuentra (upload.dll o upload.jar) o el archivo cargado excede el tamaño permitido por el servidor web. Si se modifica la propiedad UploadScript del user control, la URL puede estar mal. Solo se recomienda el cambio de valor de esta propiedad en caso de error o por ser requerido al estar desarrollando sobre una arquitectura determinada, en cualquier otro caso dejar en blanco.
    • .NET
      Escriba la URL de la aplicación; /upload.aspx , debe ver una pantalla en blanco. En caso de error verificar si el recurso "upload.dll" se encuentra en la carpeta web/bin. Si el error sucede con archivos grandes (mayores que 4 MB), trate de modificar el valor de "maximum request size" por uno mayor en el archivo web.config. El tamaño máximo requerido se especifica en kilobytes. El tamaño por defecto es 4096 KB (4 MB).
      Ejemplo:
      <system.web>
            <httpRuntime executionTimeout="600" maxRequestLength="20120"/>
      
      Si el error ocurre con cualquier archivo, verifique la propiedad ".Net Application Namespace" property. Si el valor no es el que trae por defecto (GeneXus.Programs), adicione estos manipuladores en el web.config:
      <add name="GeneXus.Programs.upload" verb="*" path="upload.aspx" type="GeneXus.Programs.upload,upload" />
    • Java
      Escriba la URL de la aplicación: <application URL>/upload , debe ver una pantalla en blanco. En caso de error verificar si el recurso "Upload.jar" se encuentra en la carpeta WEB-INF/lib. Si el error sucede solamente con archivos grandes, verifique la configuración del servidor. Si utiliza Tomcat 7.0 o superior, edite el archivo web.xml en la webapp y añada:
      <servlet>
            <servlet-name>upload</servlet-name>
            <servlet-class>upload</servlet-class>
      </servlet>
      
      <servlet-mapping>
            <servlet-name>upload</servlet-name>
            <url-pattern>/servlet/upload</url-pattern>
      </servlet-mapping>
  • Error 500
    Los archivos temporales son guardados en la misma carpeta en la que GeneXus guarda los blobs, utilizando la misma lógica para crear los nombres temporales. Esto puede fallar cuando la propiedad "Temp media directory" no tiene los valores correctos o el usuario que ejecuta la aplicación no tiene permisos de escritura en la carpeta.
    • .NET
      Asegúrese que el usuario ejecutando la aplicación (IIS) tiene permisos en la carpeta "private" que se encuentra dentro de "web".
    • Java
      Si el mensaje no tiene una descripción más detallada que "HTTP"; probablemente sea porque algún archivo jar está faltando. Copie la carpeta "drivers" de su modelo hacia la lib de la webapp. Si una descripción es mostrada, probablemente detalle que es un error de permisos o de camino no encontrado. Se debe verificar el camino y los permisos de la carpeta asociada al generador de propiedades "Temp media directory".
  • #2038: IO
    Si la propiedad UploadScript es modificada, quizás la URL no esté en el formato adecuado, si se encuentra en Java utilice el camino absoluto con "../" como en "../servlet/upload"
  • File Size
    El tamaño del archivo a cargar es mayor que el valor definido en la propiedad "sizelimit".
  • Error 302
    Ocurrió una redirección. Este caso ha sido detectado en .NET si la propiedad "SessionState" en el archivo web.config tiene su valor "cookieless" en "autodetect". Para arreglar esto, cambiar el valor por el que trae por defecto "false".
  • Barra de progreso no mostrada (al migrar de la versión 1.5)
    Este error puede ocurrir si la variable QueuedFiles no está definida (la colección UploadifyOutput) y/o no está asociada con el control (propiedad QueuedFiles).
  • "HTTP Error" en Java
    Al revisar el log del tomcat se encuentra el siguiente error: org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet invoker threw exception java.lang.NoSuchMethodError: org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest (Lorg/apache/commons/fileupload/RequestContext;)Ljava/util/List; at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest (ServletFileUpload.java:126) at upload.doPost(upload.java:98) Probar eliminando la carpeta "fileupload" de GXClassR (ubicada dentro de gxclasses: \org\apache\commons\fileupload). Ver: http://marketplace.genexus.com/question.aspx?22
  • System.String GeneXus.Utils.FileUtil.getTempFileName(System.String, System.String, System.String) en .NET
    Seguramente se esté utilizando una versión del Uploadify que no corresponde con la versión de GeneXus utilizada. Generalmente ocurre luego de una actualización de GeneXus. Para ello debes descargar la versión de Uploadify que corresponda con el upgrades que estés utilizando (Ignia te lo detectará automaticamente, sino desde GeneXus Marketplace habrá que seleccionar la descarga correcta para el Upgrade). En caso de persistir el problema, intentar importar el XPZ adjunto en el User Control (uploadify.xpz).
     

Java utilizando Tomcat 7.0 o superior con “Uso de anotaciones para la definición de servlet”
Editar el archivo web.xml en la webapp y añadir:

<servlet>
      <servlet-name>upload</servlet-name>
      <servlet-class>upload</servlet-class>
</servlet>

<servlet-mapping>
      <servlet-name>upload</servlet-name>
      <url-pattern>/servlet/upload</url-pattern>
</servlet-mapping>

Al modificar el web.xml cada vez que realicemos una modificación en GeneXus se estará sobreescribiendo el mismo. Si queremos que GeneXus haga esto automáticamente debemos modificar el Template que usa. Este se encuentra en el directorio de GeneXus que estemos utilizando dentro de la carpeta "gxjava". Allí encontraremos varios "web.xml" (como por ejemplo web7.xml), esto es porque GeneXus usa uno u otro dependiendo del caso (de la configuración de ambiente). En caso de no saber cual modificar lo conveniente es modificar todos (no son más de 6 archivos). Con esto, el cambio se aplicará siempre al web.xml.

No se puede cargar archivos de más de 4 MB (.NET)

Trate de definir un mayor valor en "maximum request size" en el archivo web.config. Este valor se define en kilobytes. El tamaño por defecto es de 4096 KB (4 MB).
Ejemplo:

<system.web>
    <httpRuntime executionTimeout="600" maxRequestLength="20120"/>

 

Java utilizando JBOSS

Si el servidor es JBOSS debe editar el archivo web.xml como se explicó con Tomcat 7.0. Además necesita adicionar commons-fileupload.jar en el directorio lib. Descargar desde: http://commons.apache.org/fileupload/download_fileupload.cgi

 

Notas:

En ambiente Java, los archivos Jar (dependencias del proyecto) son incluidos como tipo de dato "File" dentro del control e importados a la KB cuando se arrastra el control a una webform. Son automáticamente copiados dentro de la carpeta "Driver" del modelo Java. GeneXus automáticamente copia su contenido a la carpeta lib de la webapp en el servidor. En algunos casos GeneXus no realiza esta copia y debe hacerse de forma manual. Si este es el caso, después de hacer un "build" a la aplicación copie el contenido de la carpeta dentro de lib.

La KB no debe tener un objeto llamado "upload".

Páginas relacionadas: