PDA

Ver la versión completa : enctype="multipart/form-data" no retorna ruta completa



AJaramillo
25-02-2012, 22:50
Hola a tod@s,


por qué será que al tener un form donde utilizo input type="file" y declarando en el tag form enctype="mutipart/form-data" y method="post" no puedo obtener la ruta completa del archivo? Sera que es el Firefox 11.0 el del lio?



<form method="post" enctype="multipart/form-data" action="<?= PHP_SELF; ?>">
<input type="file" id="arc" name="arc">
</form>


Resulta que ese nombre de archivo se envia a script php y como llega solo el nombre del archivo el resultaso es que no encuentra el archivo y pailas....

De ante mano gracias por su atencion

endpoint
28-02-2012, 17:06
Los archivos que se suben al servidor se almacenan como ficheros temporales. Debes copiar el fichero temporal que se almacena en el servidor a una ruta en un directorio de tu aplicación, por ejemplo con move_uploaded_files().

AJaramillo
28-02-2012, 18:20
Que tal endpoint

Estuve revisando lo que me indicas.El codigo lo tengo asi:



ini_set("upload_tmp_dir","/tmp"); //en php.ini esta deshabilitado
$arc = $_POST["arc"]; // $_POST["arc"] llega sin ruta
move_uploaded_file($arc,"$upload_dir/$arc");
$gestor = file("$upload_dir/$arc");


Con esto me reporta que el archivo /tmp/mi_archivo.csv no existe.

Me puedes dar una idea de como soluciono esto?

Mil Gracias

hystd
28-02-2012, 20:09
$arc = $_POST["arc"]; // $_POST["arc"] llega sin ruta


Debes hacer uso del vector $_FILES y no de $_POST:

$_FILES["arc"]["name"] => hace referencia al nombre original del fichero.
$_FILES["arc"]"tmp_name"] => hace referencia al nombre del fichero temporal almacenado en el servidor (tal y como te ha comentado endpoint).
$_FILES["arc"]["size"] => contiene el tamaño del fichero que se ha subido al servidor.
$_FILES["arc"]["type"] => hace referencia al tipo de fichero (su mimetype).
$_FILES["arc"]["error"] => indica si el fichero se ha transferido con éxito o no.

Así, para subir el fichero debes hacer:



$ficheroTemporal = $_FILES["arc"]["tmp_name"];
$nombreOriginal = $_FILES["arc"]["name"];
move_uploaded_files($ficheroTemporal, $upload_dir.'/'.$nombreOriginal);


Un saludo.

AJaramillo
28-02-2012, 21:13
Uyyyy... tratando de hacer un prit_r($_FILES) no aparece nada.... obviamente no accede a $_FILES["arc"][...]

hystd
28-02-2012, 21:52
Noto cierta ironía en tus palabras... y te responderé que lo que si es obvio es que en $_POST[] no vas a encontrar nada referido a ningún fichero, y que si $_FILES está vacio es "obvio" que o no se está enviando ninguna información referida al fichero, y ya se vería por qué (por ejemplo, no tienes bien configurado php.ini o el directorio temporal no tiene permisos de escritura) o bien, simplemente no estás haciendo uso correcto de la función print_r... ya que prit_r no existe, hasta dónde yo sé en PHP. "Uyyy" ¿dónde está el submit del form?.

PD: Siento mucho que no te sirva la ayuda incondicional prestada y que mi aporte no esté a su altura... ¿podría ayudar a su excelencia en algo más o puedo retirarme?

AJaramillo
28-02-2012, 22:16
Noooooo..... Disculpame hystd, si mi expresión (Uyyyy) sonó irónica... en ningún momento lo quise ser y menos con alguien que me presta su ayuda desinteresadamente.

Con respecto al submit de la forma ,lo manejo con JQuery:



function subirArc(arc) {
datos = $("#depe").serialize()+"&accion=SubirDatos";
$.ajax({
data: datos,
type: "POST",
dataType: "json",
url: "pret_multiple.php?",
success: function(json) {
console.log(json);
if (json.success) {
//Aca el manejo de la respuesta
}
}
});
}


Al hacer un printr($_POST) si veo que llega el nombrre del archivo, pero sin la ruta

Mil Gracias

Un Cordial Saludo

hystd
28-02-2012, 23:07
Ok, discúlpame a mi por mal interpretarte... no te preocupes, estas cosas pasan en los foros... por suerte uno ya está acostumbrado :).

Volvemos al JQuery... es dónde tiene toda la pinta de estar el problema. Antes de nada ¿has comprobado que el fichero de configuración PHP.INI tiene la directiva file_upload activada y que el directorio temporal del servidor donde se almacena el fichero subido tiene permisos de escritura? Si es así... veamos el JQuery.

Estás enviando en formato json los datos por POST, y eso a la hora de tratar con ficheros no va a funcionar. Deberás crearte previamente un objeto javascript de tipo formdata, que en tu código debería ser algo así:



var file;
datos = new FormData();
datos.append("files[]", file);

$.ajax({
url: "pret_multiple.php",
type: "POST",
data: datos,
processData: false,
contentType: false,
function(json) {
console.log(json);
if (json.success) {
//Aca el manejo de la respuesta
}
}
});


Y en tu PHP (pret_multiple.php)...



move_uploaded_file($_FILES["files"]["tmp_name"], $_FILES["files"]["name"]);


Al adjuntar un fichero, pongamos por ejemplo una imagen, esto debería codificar el atributo data como:

data:img/gif; base64,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxx

donde xxxxxx...xxx= representa el fichero a enviar codificado en base64, y así debería funcionar...

Un saludo.

hystd
28-02-2012, 23:09
He encontrado esta página que tal vez pueda ayudarte... viene con el código fuente:

http://net.tutsplus.com/tutorials/javascript-ajax/uploading-files-with-ajax/

Un saludo.

AJaramillo
01-03-2012, 16:16
Hola hystd

Parece ser que el lio es utilizando JQuery+JSON. Al no utilizarlo trabaja bien la vaina....

Agradezco mucho tu ayuda

gabrielcorr
04-04-2012, 18:39
HYSTD Me parece que exageras mucho solo por que el amigo colombiano dice uuuuuuy, mas bien el ironico eres tu en la forma como respondes. igual el te pidio disculpas amablemente, yo solo hago hago una observacion.

Pero con tu:¿podría ayudar a su excelencia en algo más o puedo retirarme? denota que eres un resentido y le faltaste el respeto, como que "su excelencia"?. tu eres el que deberias pedirle disculpas "desde un comienzo y no el".

ojala y con esto no se moleste conmigo tambien.

pd. si vas a ayudar desinteresadamenta a la gente no los remates con esos cinismos desagradables. mejor no ayudes.

clarinetista
04-04-2012, 18:48
Ese es tu primer aporte y tu carta de presentación al foro, no estas entrando con buen pie.
Pero solo es una observación.....

gabrielcorr
04-04-2012, 19:06
Yo no vuelvo a entrar aqui es la primera y la ultima, gracias... ahora resulta que los que buscamos una ayuda agradecida somos los malos del paseo y los angelitos son los administradores del sitio que contestan de esa forma.

Hasta siempre.

Gracias a Dios hay otros lugares donde buscar ayuda. les falta mucho de amabilidad y tacto en como tratar a la gente.

hystd
04-04-2012, 20:04
HYSTD Me parece que exageras mucho solo por que el amigo colombiano dice uuuuuuy, mas bien el ironico eres tu en la forma como respondes. igual el te pidio disculpas amablemente, yo solo hago hago una observacion.

Pero con tu:¿podría ayudar a su excelencia en algo más o puedo retirarme? denota que eres un resentido y le faltaste el respeto, como que "su excelencia"?. tu eres el que deberias pedirle disculpas "desde un comienzo y no el".

ojala y con esto no se moleste conmigo tambien.

pd. si vas a ayudar desinteresadamenta a la gente no los remates con esos cinismos desagradables. mejor no ayudes.

1º Si lees, lee completamente las cosas, y verás que más abajo digo: "Ok, discúlpame a mi por malinterpretarte...", con lo que creo, si no me equivoco que todo quedó aclarado. Y más aún, la duda del compañero también llegó a solucionarse, ambas cosas es lo realmente importante, y si te fijas, después de tu intervención no has aportado nada bueno, ni productivo al hilo.

2º Decir "su excelencia" es una ironía, no una falta de respeto. Y normalmente, cuando hay cierta madurez, suele tomarse como algo gracioso, no como un ataque.

3º ¿Resentido yo? ¿En un foro? Bueno si tú lo dices... :D

4º No tengo tiempo para irme molestando por chorradas de este tipo... si ni siquiera te conozco!, seguro que eres una persona estupenda, y seguro que joven y con toda una vida por delante, para malgastarla en un foro de maleducados.

5º Creo que los que participan o han participado en este hilo, tenemos cierta madurez, como para que vayan surgiendo espontáneos, con rol de "abogados defensores", y sabemos solucionar las cositas por nuestra propia cuenta. No obstante, gracias por tu participación y hasta nunca. Si decides volver, y empezar con mejor pie, pues serás re-bienvenido, si no, pues sacaré un paquete de pañuelos y lloraré tu ausencia ¿qué quieres que te diga? Si te quieres ir, pues, como decíamos en mi pueblo: "hasta luego Lucas!".

Un saludo.

hystd
04-04-2012, 20:20
Yo no vuelvo a entrar aqui es la primera y la ultima, gracias... ahora resulta que los que buscamos una ayuda agradecida somos los malos del paseo y los angelitos son los administradores del sitio que contestan de esa forma.

Hasta siempre.

Gracias a Dios hay otros lugares donde buscar ayuda. les falta mucho de amabilidad y tacto en como tratar a la gente.

¿Qué ayudita has venido aquí a buscar? No termino de localizar en este hilo cuál es tu petición de ayuda.

Sí! los moderadores somos unos angelitos... sólo nos faltan las alas.

Espera que termine psicología... Disculpa si nuestra inteligencia emocional no es la que posees y no sabemos tener la empatía necesaria para saber cómo se siente cada uno en el momento que escribe en el foro! Si no te gusta el trato, pues jolín, que pena, ahora tendré que ir a comprar un nuevo paquete de pañuelos porque el anterior se me ha acabado :D

En serio gracias por aparecer, porque tu paso por aquí es digno de la Paramount Comedy y has conseguido que me entretenga un rato!.

Un saludo.

clarinetista
05-04-2012, 20:59
No gasto dos mensajes en tonterías, cierro el hilo, si algún usuario quiere aportar algo me contacte y lo reabro.