lunes, 5 de enero de 2009

FckEditor y el infierno del Upload

El FckEditor es un excelente editor de texto HTML.

Pero también que la configuración por defecto del almacenamiento de archivos da "pequeños" problemas que son incómodos.

El primero, del cual ya he hablado aquí, es un problema de permisos para el gestor de ficheros e/o imagenes. Y trasteando en una aplicación que estoy evolucionando me dí cuenta que en el fichero de configuración del conector que estemos usando (en mi caso aspx) puedo definir en donde voy a almacenar estos ficheros y dentro de qué subdirectorio de acuerdo a la extensión.

En mi caso esta información está en el fichero:
fckeditor\editor\filemanager\connectors\aspxconfig.ascx

Y el Path se definen en el nodo UserFilesPath. el cual por defecto está vacio.

Y aquí viene el problema de permisos que tenemos cuando estamos publicando en un host alquilado (como casi todos). El path por defecto es el RAIZ del Servidor Web.

Y doy un ejemplo real:

Tengo el dominio miDominio.com en un servidor que responde al dominio http://www.miDominio.com el cual está físicamente alojado en:

Raiz del servidor de hosting(comunmente inaccesible)/miDominio/httpDocs/

Al utilizar el fileManager del FckEditor, el sitio por defecto donde intenta almacenar los ficheros es en MiDominio y no en httpDocs, por lo cual lo primero es que dá error de permisos porque la aplicación los tiene para el directorio de publicación web httpDocs y no sobre el directorio miDominio.

Y cuando lo arreglo dando permiso sobre la carpeta raiz miDominio (a mamarla la seguridad si no funciona), entonces no encuentro físicamente donde lo está guardando porque lo busco a partir del directorio de publicación httpDocs cuando en realidad me lo está guardando un nivel por encima... =:0

Osea, que en la configuración lo cambio por:

UserFilesPath = "/httpDocs/";

Y ahora sí que me lo guarda a partir de este punto. Y se acabaron los problemas de permisos.

Pero continuemos con la configuración del fileManager:

Ahora me veo que me está dejando los ficheros en subdirectorios de acuerdo a la extensión del fichero. Por lo cual me voy a la configuración y, como quiero que me guarde las imágenes dentro del subdirectorio imagenes y no en el images, que es el que es por defecto, pues lo modifico:

TypeConfig[ "Image" ].AllowedExtensions = new string[] { "bmp", "gif", "jpeg", "jpg", "png" };
TypeConfig[ "Image" ].DeniedExtensions = new string[] { };
TypeConfig[ "Image" ].FilesPath = "%UserFilesPath%imagenes/";
TypeConfig[ "Image" ].FilesAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%imagenes/" );
TypeConfig[ "Image" ].QuickUploadPath = "%UserFilesPath%";
TypeConfig[ "Image" ].QuickUploadAbsolutePath = ( UserFilesAbsolutePath == "" ? "" : "%UserFilesAbsolutePath%" );

Y ahora si que si. Guardo las cosas en donde me viene mejor. Y sé que le tengo que dar permisos de escritura solamente al directorio imagenes.

No hay comentarios: