Ver Mensaje Individual
  #5 (permalink)  
Antiguo 11/09/2007, 01:19
kitune
 
Fecha de Ingreso: julio-2005
Mensajes: 275
Antigüedad: 18 años, 9 meses
Puntos: 3
Re: problema con rutas de upload.php y flash

Este es el codigo Actionscript:

Código:
//importamos las clases necesarias:
import flash.net.FileReferenceList;
import flash.net.FileReference;
//Definimos los archivos permitidos, que es un array con un objeto dentro:
_root.imagen._visible = false;
var allTypes:Array = new Array();
imageTypes.description = "Images (*.jpg;*.jpeg;*.gif;*.png;)";
var imageTypes:Object = new Object();
//"description" declara lo que saldra en el dialogo de eleccion de archivos:
imageTypes.description = "Imagenes (*.jpg;*.gif;*.png;)";
//la propiedad "extension" declara los archivos permitidos (en este caso solo jpgs, gifs y pngs):
imageTypes.extension = "*.jpg;*.gif;*.png;";
allTypes.push(imageTypes);
//Creamos un listener que se llamara cuando los archivos sean seleccionados,
//que a su vez enviara los archivos elegidos a una funcion para que hagamos algo con ellos:
var listListener:Object = new Object();
listListener.onSelect = function(fileRefList) {
	crearArchivos(fileRefList.fileList);
};
//y finalmente creamos la instancia de FileReferenceList:
var fileRef:FileReferenceList = new FileReferenceList();
//le aplicamos el listener:
fileRef.addListener(listListener);
//y declaramos que btnExaminar (un boton que tenemos en el escenario) llame al dialogo de eleccion de archivos, 
//con las restricciones de "allTypes":
btnExaminar.onRelease = function() {
	fileRef.browse(allTypes);
};
function crearArchivos(files) {
	//por si ya hemos subido algo (esto lo entenderan al final):
	//borramos todos los mclips creados anteriormente
	for (var i in arrRef) {
		arrRef[i].removeMovieClip();
	}
	//y borramos las variables globales
	delete puntero;
	delete arrRef;
	//deshabilitamos el boton examinar.
	btnExaminar.enabled = false;
	//posicion en Y inicial para los archivos.
	var posY = 20;
	// creamos un array global que contendra todos los MCs que referencian a los archivos.
	_global.arrRef = new Array();
	// por cada archivo seleccionado:
	for (var i = 0; i<files.length; i++) {
		//creamos un clip con un texto
		//el texto mostrara el tamaño y el nombre de cada archivo
		c.nombre.text = "»NOMBRE: "+files[i].name;
		c.peso.text = "»PESO: "+Math.ceil(files[i].size/1000)+" Kb";
		//creamos una variable dentro del mclip que referencia al archivo de FileReference
		c.file = files[i];
		//y metemos el clip en el array global
		arrRef.push(c);
	}
	//y finalmente comenzamos subiendo el primer archivo:
	// declaramos una variable global que indicara en que archivo vamos (ahora vamos en el primero):
	_global.puntero = 0;
	// asociamos un listener al archivo **** lo explicare a continuacion.
	arrRef[puntero].file.addListener(fileListener);
	// y comenzamos la descarga
	arrRef[puntero].file.upload("upload.php");
}
//creamos el objeto listener
var fileListener:Object = new Object();
//cuando se abre el archivo, y se hace la peticion al servidor para comenzar la subida
fileListener.onOpen = function(file) {
	//aprovechamos para crear un textfield que mostrara el progreso.
	_root.pleasewait.play();
	_root.pleasewait.progreso.text = "comenzando...";
};
//cada vez que se suba un pedazo de archivo:
fileListener.onProgress = function(file, bytesLoaded, bytesTotal) {
	//mostramos el porcentaje de progreso
	var porcentaje = Math.round(bytesLoaded*100/bytesTotal);
	_root.pleasewait.progreso.text = porcentaje+"%";
};
//cuando el archivo haya completado la subida satisfacotiramente
fileListener.onComplete = function(file):Void  {
	//mostramos que el archivo se subio bien
	_root.pleasewait.progreso.text = "Listo!";
	c.ok.text = "LISTO!";
	_root.imagen._visible = false;
	c.muestra.text = _root._url.substring(0, _root._url.lastIndexOf("/")+1)+"imagen/"+file.name;
	_root.pleasewait.gotoAndPlay("listo");
	//y vamos a por el siguiente (ver la funcion mas abajo)
	subirSiguiente();
};
//con cualquier error:
fileListener.onHTTPError = fileListener.onIOError=fileListener.onSecurityError=function (file, error) {
	//mostramos que ha habido un error
	_root.pleasewait.gotoAndPlay("carga");
	_root.pleasewait.progreso.text = "error: "+error;

	//y vamos a por el siguiente (ver la funcion mas abajo)
	subirSiguiente();
};
function subirSiguiente() {
	//si el puntero es menor que la cantidad de archivos
	if (puntero<arrRef.length-1) {
		//aumentamos el puntero en uno
		puntero++;
		//y subimos el siguiente archivo
		arrRef[puntero].file.addListener(fileListener);
		arrRef[puntero].file.upload("upload.php");
	} else {
		//sino, volvemos a habilitar el boton examinar,
		//para permitir seguir subiendo archivos
		btnExaminar.enabled = true;
	}
}

y este el php:

Código:
<?php
//carpeta donde guardaremos el archivo
//ruta completa del archivo que guardaremos
if(!is_dir("./imagen")) mkdir("./imagen", 0755); 
//move the uploaded file
$nombre="./imagen/".basename($_FILES['Filedata']['name']);
//si el archivo se guarda satisfactoriamente
if ( @move_uploaded_file( $_FILES['Filedata']['tmp_name'] , $nombre)) {
	chmod("./imagen/".$_FILES['Filedata']['name'], 0777);
	//enviamos a flash un mensaje de que este archivo existe
	header('HTTP/1.1 200 OK');
}else{
	//sino, le decimos a flash que este archivo (upload.php) no existe,
	//asi flash gatillara el evento onHTTPError
	header('HTTP/1.1 404 Not Found');
}
?>
como puedes ver, le digo al flash que el upload.php esta en el mismo nivel que el html. Pero no lo carga sino lo pongo en el mismo directorio que el swf.