2013-10-16 101 views
16

我想設置一個表單,使用ajax請求提交到已經使用Ajax構建的api。出於某種原因,文件只是不想傳輸到系統,儘管已經有一個後端用於處理這個問題,並且它工作正常。AngularJs Ajax POST表單與文件上傳

我的服務看起來像這樣基於一個教程,我發現在這裏: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; 
     }); 
    }, 

我有一種感覺,這只是一些輕微的真我失蹤,任何人都可以提供一些幫助?

+0

什麼是'REQUEST_url' – tymeJV

+0

一個全局變量,我使用 – flashpunk

+0

你放在@flashpunk'這樣'<輸入類型$ scope.file' =「file」ng-model =「file」/>'?,因爲我也需要上傳文件/圖像與angularjs – RandomUser

回答

14

我遇到過類似的問題。

的解決方案是使用FORMDATA

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

並更換

data: { 
      file: $scope.file 
     } 

data: { 
      formdata 
     } 
+1

formdata不支持在許多ie瀏覽器,它支持來自ie10 +版本,所以它的非通用解決方案 – Satish

+6

@Satish同意,這不是最好的解決方案。你有提供嗎? – flashpunk

+1

除了XMLHttRequest 2或者說FormData對象之外,沒有其他方法可以使用Ajax上載文件。我認爲對於不兼容的瀏覽器,開發人員使用Flash或其他技術。 – agpt

3

的數據應該是data: $scope.file

和重要的事情:喲你應該設置'Content-Type': undefined以使瀏覽器設置正確的內容類型。

7

我在使用angular + laravel實現文件上傳時遇到了問題。每次我嘗試發送多部分表單時,服務器都不會收到表單數據,即使是顯然正在發送,或者我想。我終於找到了解決我所有問題的文章THIS

長話短說,這是$ HTTP調用:

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) { 

}); 

對方回答由rolin.tencent.Shenzhen還提到設置Content-Typeundefined讓瀏覽器排序出來。