2013-10-16 10 views
16

Ich versuche ein Formular zu erstellen, das mit einer Ajax-Anfrage an eine API gesendet wird, die bereits mit Ajax erstellt wurde. Aus irgendeinem Grund möchte die Datei einfach nicht in das System übertragen werden, obwohl bereits ein Back-End dafür gebaut wurde, und es funktioniert gut.AngularJs Ajax POST-Formular mit Datei-Upload

sieht Mein Service dieses wie auf einem Tutorial basiert ich hier gefunden: http://badwing.com/multipart-form-data-ajax-uploads-with-angularjs/

addActivity: function(url){ 
     return $http({ 
      method: 'POST', 
      url: REQUEST_URL + 'Volunteering/AddActivity?token=' + token + url, 
      headers: { 
       'Content-Type': 'multipart/form-data' 
      }, 
      data: { 
       file: $scope.file 
      }, 
      transformRequest: formDataObject 
     }). 
     then(function(result) { 
      console.log(result); 
      return result.data; 
     }); 
    }, 

ich das Gefühl habe, es ist nur etwas wirklich gering, dass ich fehle, kann jemand etwas Hilfe anbieten?

+0

Was ist 'REQUEST_url' – tymeJV

+0

eine globale Variable i – flashpunk

+0

bin mit @flashpunk Sie' $ scope.file' wie diese ' '?, da ich auch Datei/Bild ajaxly mit angularjs – RandomUser

Antwort

14

Ich konfrontiert ein ähnliches Problem.

Die Lösung ist Formdata

var formData = new FormData(); 
formData.append("file", $scope.file); 

und ersetzen

data: { 
      file: $scope.file 
     } 

mit

data: { 
      formdata 
     } 
+1

formdata wird in vielen Browsern nicht unterstützt, seine Unterstützung von ie10 + Versionen, so dass es keine generische Lösung – Satish

+6

@Satish Vereinbarte, ist es nicht die beste Lösung. Hast du einen anzubieten? – flashpunk

+1

Es gibt keine andere Möglichkeit, Dateien mit Ajax hochzuladen, außer XMLHttRequest 2 oder das FormData-Objekt. Ich nehme an, dass Entwickler für nicht kompatible Browser Flash oder eine andere Technologie verwenden. – agpt

3

Die Daten sollten data: $scope.file

und wichtige Sache zu verwenden: yo Sie sollten 'Content-Type': undefined festlegen, damit der Browser den richtigen Inhaltstyp einstellt.

7

Ich hatte Probleme beim Implementieren des Dateiuploads mit angular + laravel. Jedes Mal, wenn ich versuchte, das mehrteilige Formular zu verschicken, würde der Server die Formulardaten nicht erhalten, selbst wenn es eindeutig gesendet wurde, oder so dachte ich. Ich fand schließlich Artikel, der alle meine Probleme löste.

Lange Rede kurzer Sinn, ist dies der $ http Aufruf:

var data = new FormData(); 

data.append("file", file); 

$http.post("//myDomain.com/api/demo", data, { 
    headers: { 'Content-Type': undefined }, 
    transformRequest: angular.identity 
}).success(function (data, status, headers, config) { 

}).error(function (data, status, headers, config) { 

}); 

Die andere Antwort von rolin.tencent.Shenzhen auch Content-Type als undefined erwähnte Einstellung es die Browser Art abzulassen.