2016-08-09 45 views
-1

Ich habe ein Formular, in dem ich eine "virtuelle Form" haben möchte, die Dateianhänge bearbeitet. Ich habe eine Datei-Eingabe und eine Schaltfläche, um die Datei zu senden.Ajax POST-Format mit PHP

Das Problem ist, dass mein PHP unterstützt wird nur POST und dass mit der Struktur:

"file"; filename="xxx.jpg" 
Content-type: image/jpeg 

. 
. 
. 

, wo die Punkte, die binären Daten aus der Datei darstellen.

Von dem, was ich gelesen habe, sollte es $_FILES und $_POST Variablen sein, aber ich bekomme sie nicht.

Hier sind die entsprechenden Codezeilen in HTML und Javascript in:

<input type="file" id="file-to-append" name="file-attachment"> 
<input type="button" onClick="append_file()" value="Add file"> 

function append_file() { 
var formData = new FormData(); 


console.log(jQuery('#file-to-append')); 
    formData.append('file', jQuery(":file")[0].files[0]); 

    jQuery.ajax({ 
     url : 'file_upload.php', 
     type : 'POST', 
     data : formData, 
     processData: false, 
     success : function(data) { 
      console.log(data); 
      alert("Added"); 
     } 
    }); 
} 

Könnte jemand vor Ort oder wissen, wo das Problem liegt?

+0

ich verwendet habe, wette, du hast kein "enctype" -Attribut in deinem "form" -Tag. –

+0

posten Sie Ihr komplettes Formular .. – jaysingkar

+0

Enctype wäre in diesem Fall egal – user3284463

Antwort

-1

Benutzen Sie die rechte encrypte in Ihrem Formular

<form id="data" enctype="multipart/form-data" method="post" > 
<input type="submit" value="Add file"> 
</form> 

Ajax Gebrauch

$("form#data").submit(function() 
{var formData = new FormData($(this)[0]); 
$.ajax({ 

        url: "filename.php", 
        type: 'POST', 
        data: formData, 
        async: false, 
        success: function (data) 
        { 
          var jsonData = $.parseJSON(data); 
          var errFlag =jsonData.errorFlag; 
          var errMsg =jsonData.errorMessage; 

          if(errFlag == 1) 
          { 
           //successmessage; 
          } 
          else 
          { 
           //errormessage; 
          } 
        }, 
        cache: false, 
        contentType: false, 
        processData: false 

       }); 
       return false; 


}); 
0

einreichen Die Daten werden vorbei richtig, so gibt es kein Problem mit der Ajax-Aufruf ist.

Sie erhalten das Dateiobjekt in PHP mit dem Super Global $_FILES.

In Ihrem Fall möchten Sie es verwenden:

$file = $_FILES['file']; 
echo $file['name']; 
echo $file['tmp_name']; 
. 
. 
. 

einen Blick auf die $_FILES Array nehmen Sie könnte:

echo "<pre>"; 
print_r($_FILES); 
echo "</pre>"; 
0

Dinge sind immer seltsamer. Ich habe es funktioniert, aber nur auf IE 11, indem Sie contentType: 'multipart/form-data' Mit Chrome funktioniert es überhaupt nicht mit dieser Einstellung.

Ich habe versucht mit contentType: false, aber es funktioniert nicht auf jeder Plattform, obwohl es das Richtige sein sollte (TM) zu tun: /.

Ich habe auch enctype-setting in der äußeren Form hinzugefügt, aber ich frage mich, wie es helfen könnte, weil ich nicht (vollständige Form) einreiche, sondern nur Dinge "innerhalb" der Hauptform hinzufüge (die ich selbst handhabe). Anscheinend hat es auch nicht geholfen.

Dies sollte kein Problem sein, aber aus irgendeinem Grunde bin ich mit dieser Ajax-Implementierung stecken, obwohl ich Datei-Upload seit langer Zeit (zweistellige Zahl) ...

hank