Foros del Web » Programando para Internet » PHP »

Problemas al subir un archivo cuyos datos vienen de ajax

Estas en el tema de Problemas al subir un archivo cuyos datos vienen de ajax en el foro de PHP en Foros del Web. Hola maestros, tengo un problema que ya no se como solucionar, resulta que tengo todo un script hecho para adjuntar archivos a las noticias de ...
  #1 (permalink)  
Antiguo 30/12/2007, 12:25
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años
Puntos: 16
Problemas al subir un archivo cuyos datos vienen de ajax

Hola maestros, tengo un problema que ya no se como solucionar, resulta que tengo todo un script hecho para adjuntar archivos a las noticias de mi sitio que funciona como el adjuntar de google, el problema es que cuando mando los datos por ajax a la página dode hago el upload el archivo me llega con \\ en vez de con \ (ejemplo C:\\Carpeta\\archivo.zip), y trato de hacerle un str_replace('\\','\', $file) pero me interpreta el \' como ' y no hace lo que quiero que haga, en el fondo lo que quiero es que la direccion quede solo con un \, osea C:\Carpeta\archivo.zip. les dejo el código de mi pagina de uploads a ver si a ustedes se les ocurre como puedo hacerlo

Código PHP:
    $id $_POST['id'];
    
$file $_POST['file'];
    
    
$dir '../files/news/';

    if(isset(
$_FILES[$file]['tmp_name'])) 
    {
        if (!
copy($_FILES[$file]['tmp_name'], $dir.$_FILES[$file]['name']))
        {
            
//algo que no viene al caso
        
}
        else
        {
            
//algo que no viene al caso
        
}
    } 
Saludos y gracias de antemano.

PD: felices fiestas
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #2 (permalink)  
Antiguo 30/12/2007, 12:49
Avatar de carmagedon  
Fecha de Ingreso: junio-2005
Ubicación: Argentina
Mensajes: 794
Antigüedad: 19 años, 5 meses
Puntos: 23
Re: Problemas al subir un archivo cuyos datos vienen de ajax

Mira, éste código utilizo yo para subir archivos y funciona perfecto. Echale una mirada e intenta reelaborar tu código.

Código:
if (is_uploaded_file($_FILES["foto_upload"]["tmp_name"])){
		move_uploaded_file($_FILES["foto_upload"]["tmp_name"], $ruta);
			$estado = "Archivo subido: <b>".$archivo."</b>";
			echo $estado;					
			}elseif(!move_uploaded_file($_FILES["foto_upload"]["tmp_name"], $ruta."".$archivo)){
		    $estado = "Archivo No subido: <b>".$archivo."</b>";
			echo $estado;
}
Saludos.
  #3 (permalink)  
Antiguo 30/12/2007, 13:06
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años
Puntos: 16
Re: Problemas al subir un archivo cuyos datos vienen de ajax

Hola carmagedon, primero gracias por responder pero creo que me explique mal. el código que puse funciona bien cuando lo llamo desde el action de un formulario por post. El problema es que cuando hago la llamada desde ajax al archivo le paso tambien por post pero la ruta del archivo en vez de llegar como C:\Carpeta\archivo.zip llega con \\ osea C:\\Carpeta\\archivo.zip, y eso me hace sospechar que el script no funciona a causa de eso, pues al llegar con \\ todos los $_FILES no funcionan tiran todos vacio, de hecho recien me di cuenta que lo estaba usando mal, el código creo que deberia ser asi:

Código PHP:
    $id $_POST['id'];
    
    
$dir '../files/news/';

    if(isset(
$_FILES['file']['tmp_name'])) 
    {
        if (!
copy($_FILES['file']['tmp_name'], $dir.$_FILES['file']['name']))
        {
            
//algo que no viene al caso
        
}
        else
        {
            
//algo que no viene al caso
        
}
    } 
Pero asi tampoco funciona.

Bueno como creo que el problema esta en el \\ en vez de \ quiero probar reemplazando el \\ por \ pero como dije anteriormente con el str_replace no se como hacerlo.

Saludos
</span></span>
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #4 (permalink)  
Antiguo 30/12/2007, 13:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: Problemas al subir un archivo cuyos datos vienen de ajax

El_Metallick, no es posible enviar archivos via AJAX, tienes que usar un "emulador" de AJAX que es haciendo un POST hacia un Iframe como lo hace google.

Saludos.
  #5 (permalink)  
Antiguo 30/12/2007, 13:34
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años
Puntos: 16
Re: Problemas al subir un archivo cuyos datos vienen de ajax

mmm buno entonces volvi a mi problema original :S, el problema es que asi lo hacia, pero para ello necesitaba crear un nuevo form para cada input file de mi formulario, el problema es que no se pueden anidar formularios en HTML y si tengo adjuntos como parte de un formulario y trato de agregar mas forms dentro de el no puedo, bueno gracias de todas formas GatorV
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #6 (permalink)  
Antiguo 30/12/2007, 13:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: Problemas al subir un archivo cuyos datos vienen de ajax

Puedes agregar mas inputs a un mismo formulario si usas la nomenclatura de arreglos:
Código HTML:
Archivo 1:<input type="file" name="archivos[]" />
Archivo 2:<input type="file" name="archivos[]" />
Archivo 3:<input type="file" name="archivos[]" />
Archivo 4:<input type="file" name="archivos[]" /> 
Saludos.
  #7 (permalink)  
Antiguo 30/12/2007, 15:10
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años
Puntos: 16
Re: Problemas al subir un archivo cuyos datos vienen de ajax

Si pero el problema es que para cada input file necesito que se procese el upload por separado, la idea es que en cuanto se seleccione un archivo se comience a subir. Pero bueno al final lo solucione separando los formularios y cada vez que se sube un archivo se agrega un input hidden al formulario principal. Saludos y gracias por la ayuda.

----------- Edit ------------

Estaba pensando y me asalto una duda. Cuando uno tiene un form post y un input file dentro de el y manda el formulario a una pagina x.php, en x.php al hacer $_POST['archivo'] rescata la ruta del archivo o el archivo propiamente tal, en otras palabras, se manda la ruta del archivo o el archivo en si.

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!

Última edición por El_Metallick; 30/12/2007 a las 15:26
  #8 (permalink)  
Antiguo 30/12/2007, 16:06
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: Problemas al subir un archivo cuyos datos vienen de ajax

Mas bien se envia el texto que tiene en este caso el input del tipo file, pero no se envia el archivo, ya que para recuperar el archivo, forzosamente debes de usar el super arreglo $_FILES.

Saludos.
  #9 (permalink)  
Antiguo 30/12/2007, 16:50
 
Fecha de Ingreso: abril-2006
Mensajes: 8
Antigüedad: 18 años, 7 meses
Puntos: 1
Re: Problemas al subir un archivo cuyos datos vienen de ajax

Yo creo que sio quieres arreglar la ruta de los \\, lo que puedes hacer es usar str_replace (como lo estabas haciendo) pero diciendole a php que encuentre ese caracter exclusivamente.

Ejemplo.

Código PHP:

$file 
str_replace("\\\\","\\"$file
  #10 (permalink)  
Antiguo 30/12/2007, 17:54
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años
Puntos: 16
Re: Problemas al subir un archivo cuyos datos vienen de ajax

Cita:
Iniciado por GatorV Ver Mensaje
Mas bien se envia el texto que tiene en este caso el input del tipo file, pero no se envia el archivo, ya que para recuperar el archivo, forzosamente debes de usar el super arreglo $_FILES.

Saludos.
Entonces por lo mismo podria pasar mediante ajax texto del input file por post y rescatarlo despues en mi pagina de upload, y deberia funcionar, osea $_FILES['file']['tmp_name'] y $_FILES['file']['name'] deberian tener los valores adecuados pero no los tienen de hecho quedan vacios y ahora si que no entiendo porque, trate de hacerlo con

$_FILES[$file]['tmp_name']
$_FILES[$file]['name']

con

$file = str_replace('\\\\','\\',$_POST['file']); (Gracias wign)

y aun asi no funciona ya no se que problema tiene en verdad no entiendo mucho el funcionamiento de $_FILES averiguaré al respecto.

Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #11 (permalink)  
Antiguo 31/12/2007, 00:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Re: Problemas al subir un archivo cuyos datos vienen de ajax

El problema es que cuando tu haces una peticion via AJAX, esta se envia como application/www-url-encoded form, y esto lo que hace es no enviar los archivos (ya que el Browser trata el campo de input como si fuera un campo de texto).

Al cambiar tu el tipo de peticion a application/multipart-encoded (no recuerdo si es esa) forzas al explorador a enviarte el archivo como binario, PHP rescata ese contenido binario y escribe un archivo temporal, posteriormente le entrega el control a tu script (con el que tu puedes leer este archivo via el super arreglo $_FILES).

Via AJAX esto no es posible pero por limitacion del explorador, no es problema de PHP en absoluto, es una limitacion o mas bien algo que no se implemento en los exploradores actuales.

La unica forma de "emular" esto es usando iframes ocultos, donde tu hagas un POST normal con su tipo de formulario que es application/multi-part, esto hace que en el request se envie el archivo con sus datos en binario y puedas posteriormente usar el super arreglo $_FILES.

Espero que con esto entiendas el porque no es posible subir archivos via AJAX (por lo menos por ahora).

Saludos.
  #12 (permalink)  
Antiguo 31/12/2007, 00:55
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años
Puntos: 16
Re: Problemas al subir un archivo cuyos datos vienen de ajax

tristemente me dicuenta de aquello tras mucho leer. Bueno habrá que ingeniarselas por otro lado. Saludos y gracias por la ayuda
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:27.