PHP e Ajax upload di file – non Può ottenere il tmp_name con $_FILES

Sto cercando di caricare un file utilizzando Ajax, ma sto avendo problemi di gestione del file…
Per scopi di test ne ho costruito un semplice codice che assomiglia a questo:

JS:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST",document.getElementById('upload').action,true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
var cmdStr="q="+str;
xmlhttp.send(cmdStr);

document.getElementById("ResponseDiv").innerHTML=xmlhttp.responseText;

PHP:

$q=$_POST["q"];
echo $q;

Funziona benissimo e xmlhttp.responseText stampe [object File].

Il mio problema, tuttavia, è che ho bisogno di ottenere il nome del file temporaneo con $_FILES["q"]['tmp_name']. Per farlo ho cambiato il codice nel modo seguente:

JS:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST",document.getElementById('upload').action,true);
xmlhttp.setRequestHeader("enctype","multipart/form-data");
var cmdStr="q="+str;
xmlhttp.send(cmdStr);

document.getElementById("ResponseDiv").innerHTML=xmlhttp.responseText;

PHP:

$q=$_FILES["q"]["tmp_name"];
echo $q;

Problema è che ora con xmlhttp.responseText non ricevo niente.
Qualcuno sa di cosa sto facendo di sbagliato?

  • fare un var_dump di $_POST[“d”] e vedere che cosa il vostro risultato. La risposta potrebbe essere lì. <?php var_dump($_POST[“d”]); ?>
  • verifica con var_dump è returns string(13) "[object File]" quando si utilizza $_POST (cioè quando è tornato [object File]), mentre restituisce NULL quando si utilizza $_FILES (cioè quando è tornato nulla). Quindi significa che io sono bloccato?
InformationsquelleAutor don | 2012-10-23

 

2 Replies
  1. 1

    Check out questa risposta per fare l’upload di file con l’AJAX. È possibile, ma non è compatibile in tutti i browser.

    jQuery stato di Avanzamento del Caricamento e AJAX upload di file

    In alternativa, se si desidera che al volo di upload, c’è un fresco biblioteca è possibile ottenere chiamato ‘Uploadify’. Si tratta di un flash/jquery (o HTML5 ora) rig che consente di caricare i file al volo. Nella versione flash, l’ultima volta che l’ho usato… è possibile aggiungere le funzioni di callback per fare sostanzialmente ciò che si vuole.

    Alcune intelligenti javascript potrebbe fare questo lavoro per voi.

    http://www.uploadify.com/

    • Perfetto grazie! Ho guardato l’altra domanda e realizzato come utilizzare formData. Ha risolto il problema, ora si ottiene il file con l’Ajax, come stavo cercando di fare.
  2. 0

    AJAX non fa l’upload di file. Non è progettato per questo. La soluzione standard è quello di avere il codice JS costruire un iframe nascosto e fare un POST del tipo caricamento che. Come tale, se si prova a fare echo $_FILES['q']['error'], si sarebbe probabilmente hanno ottenuto 4 per il “no file”.

    • Ho provato con $_FILES['q']['error'] ma ancora senza alcuna risposta da parte del server… il Mio problema è che vorrei implementare il drag and drop per caricare un file, non è possibile comunque? Io in realtà non avete davvero bisogno di Ajax, ma per quello che ho visto in giro l’unica opzione che sembrava essere l’Ajax, ma poi se dici così mi sono un po ‘ confuso…
    • Questa risposta potrebbe essere valida al momento dell’invio, ma potrebbe non essere del tutto corretta, oggi

Lascia un commento