Archivos de Categoría: Coldfusion - Paginas 2

Calcular el peso de un fichero

Tipica función para mostrar lo que pesa un fichero, poco más hay que decir

<cffunction name="GetPesoFichero" output="false" returntype="string">
	<cfargument name="fichero" type="string" required="yes">
	<cfset tamano = createObject("java","java.io.File").init(expandpath(arguments.fichero)).length()>
	<cfif evaluate(tamano / 1048576) gt 1>
		<cfreturn "(" & numberformat(tamano / 1048576, '999.99') & "&nbsp;Mb)">
	<cfelse>
		<cfreturn "(" & numberformat(tamano / 1024, '999.99') & "&nbsp;Kb)">
	</cfif> 
</cffunction>

Extender el Application.cfc a un subdirectorio

Para extender componentes lo normal es usar el atributo extends pero por cosas del coldfusion, no se puede extender el Application.cfc desde un subdirectorio así que toca hacer el truco del almendruco.

Si tenemos un Application.cfc en el raíz del tipo:

<cfcomponent displayname="Application" output="no" hint="Handle the application."> 
	<cfscript>
		//Variables de Application
		this.name = "Nombre_aplicacion";   
		this.Sessionmanagement = true;
		this.SetClientCookies  = true;
		this.Sessiontimeout = "#CreateTimeSpan(0,2,0,0)#";
		this.applicationtimeout = "#createtimespan(0,12,0,0)#";
		this.CustomTagPaths = GetDirectoryFromPath(GetCurrentTemplatePath());
	</cfscript>

	<cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false">
		<cfinclude template="application_variables_de_aplicacion.cfm" /> 
		<cfreturn true />
	</cffunction>
	
	<cffunction	name="OnSessionStart" access="public" returntype="void"	output="false"	>
		  <cfinclude template="application_variables_de_sesion.cfm">
		  <cfreturn />
	</cffunction>	
</cfcomponent>

Lo que hacemos es crearnos otro componente en el raíz que nos sirva de puente para extender el Application.cfc, en este caso lo llamaremos ApplicationProxy.cfc

<cfcomponent name="ApplicationProxy" extends="Application">
</cfcomponent>

Y ahora en el Application.cfc del subdirectorio si podremos extender el ApplicationProxy.cfc y así heredar Application.cfc del raíz

<cfcomponent name="Application" extends="ApplicationProxy">
	<cffunction name="OnRequestStart" access="public" returntype="boolean" output="true" hint="Fires at first part of page processing.">
		<!--- control de la sesion para que no se cuelen sin logar --->
		<cfset lista_pags_no_requiere_login = "login.cfm,recordar_contrasena.cfm">
	    <cfif not StructKeyExists(session, "logado") and (FindNoCase(GetFileFromPath(GetBaseTemplatePath()),lista_pags_no_requiere_login) eq 0)>
	        <cflocation url="login.cfm" addtoken="no" />
	    </cfif>	    
		<cfreturn true />
	</cffunction> 
</cfcomponent>

Forzar la descarga de un fichero

Si plantamos el enlace directamente a un fichero, si el navegador soporta el formato, lo abrirá directamente sobre el navegador, cosa que en muchas ocasiones no queremos (pdfs, words, etc). La solución es forzar la descarga del fichero con la etiqueta cfcontent:

<cfif FileExists(ExpandPath('fichero.pdf'))>
   <cfheader name="content-disposition" value="inline; filename=fichero.pdf">
   <cfcontent type="application/unknown" file="#ExpandPath('fichero.pdf')#" DeleteFile="No"> 
</cfif>