En este tutorial vamos a explicar cómo obtener el nombre y el tamaño en KBytes de los archivos alojados en determinado directorio del servidor web. Luego pasaremos está información a Flash en formato XML. Esta técnica tiene múltiples aplicaciones, como por ejemplo:
- Cargar una galería de imágenes que previamente hayamos depositado vía FTP en en el servidor.
- Mostrar los enlaces de descarga de un conjunto de archivos en una carpeta. (NUESTRO CASO)
- Explorar el contenido del disco duro del servidor web.
Como Flash no puede realizar esta función, necesitamos alguna tecnología de servidor como PHP, ASP, ColdFusion..., en este tutorial vamos a emplear ASP.
Para ver como hacerlo en PHP, pulsa aquí.
COMO HACERLO.
Primero creamos el archivo explorar.asp que es el que se va a encargar de mostrar en formato XML la información de los archivos, en este ejemplo se trata de la carpeta files situada en la raiz de nuestro dominio. En esta carpeta están los archivos de descarga que acompañan a nuestros tutoriales.
Contenido de explorar.asp
<%
' intentamos evitar la caché del navegador --------------
Response.Expires=0
Response.CacheControl="private"
' ----------------------------------------------------------------
Response.ContentType="text/XML"
'Creamos el objeto FileSystemObject
Set fso = Server.CreateObject("Scripting.FileSystemObject")
' elegimos la carpeta files desde la raiz del servidor web
' sustituir "/files/" por la que os interese
Set folder = fso.GetFolder(Server.MapPath(("/files/")))
Set files = folder.Files '
' construimos el XML ----------------------------------------
Response.Write("<?xml version='1.0' ?><exploracion carpeta='"+folder.Name+"'>")
For Each file in files
fil=file.Name
Response.write("<archivo nombre='")
Response.write(file.Name)
Response.write("' size='")
Response.write(file.size\1024)
Response.Write("' />")
Next
Response.Write("</exploracion>")
' ----------------------------------------------------------------
Set files = nothing
Set folder = nothing
Set fso = nothing
%>
En este código sólo tenéis que modificar la línea
Set folder = fso.GetFolder(Server.MapPath(("/files/")))
Donde ponéis la carpeta a explorar. Podéis ver el resultado del documento aquí.
Luego en nuestra película incluimos este código en el primer fotograma:
XML.prototype.ignoreWhite = true;
miXML = new XML();
miXML.onLoad = verArchivos;
function verArchivos(ok) {
carpetaElegida = this.firstChild.attributes.carpeta;
if (ok) {
var files = this.firstChild.childNodes;
for (var k = 0; files[k]; k++) {
archivos.addItem(files[k].attributes.nombre+" - "+files[k].attributes.size+" KBytes", files[k].attributes.nombre);
}
} else {
//fallo en la carga
}
}
function clicLista(component) {
getURL("/files/"+component.getSelectedItem().data, "_self");
}
En la primera línea,
XML.prototype.ignoreWhite = true;
le decimos a Flash, que ignore los espacios en blanco y las tabulaciones en el momento de analizar cualquier XML que carguemos.
Después, definimos el objeto XML que va a recibir los datos del fichero ASP y la función verArchivos. Esta función se va recorrer el XML y va a añadir un elemento al listBox por cada archivo que haya en la carpeta a explorar.
La función clicLista es la que se ejecuta cuando seleccionamos un elemento del listBox, en nuestro caso, lanza la descarga del archivo seleccionado.
Por último falta el código del botón, que es el que carga los datos XML, el código es:
on (release) {
//evitamos cargar el XML más de una vez
if (!miXML.loaded) {
miXML.load("/asp/explorar.asp");
}
}
Os recomendamos la descarga del fla con comentarios explicativos, ejemplo_explorar.zip