11/09/2007, 01:19
|
| | Fecha de Ingreso: julio-2005
Mensajes: 275
Antigüedad: 19 años, 4 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. |