带有文件上传的AngularJs Ajax POST表单

fla*_*unk 16 javascript ajax angularjs

我正在尝试使用ajax请求设置要使用Ajax构建的api提交的表单.由于某种原因,文件只是不想传输到系统,虽然已经有一个后端构建来处理这个,它工作正常.

根据我在这里找到的教程,我的服务看起来像这样: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;
    });
},
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,这只是一件非常小的东西,我不知道,有人可以提供一些帮助吗?

Sri*_*r T 14

我遇到了类似的问题.

解决方案是使用formData

var formData = new FormData();
formData.append("file", $scope.file);
Run Code Online (Sandbox Code Playgroud)

并替换

data: {
    file: $scope.file
}
Run Code Online (Sandbox Code Playgroud)

同

data: {
    formdata
}
Run Code Online (Sandbox Code Playgroud)

  • @Satish同意,这不是最好的解决方案.你有一个提供吗? (7认同)
  • 考虑IE9已被弃用.它几乎在每个平台都被弃用(即仅在vista和windows server 2008中支持).谷歌不支持IE9.Facebook不支持IE9.MS不支持Windows 7+的IE9. (3认同)
  • FormData的完整支持表:http://caniuse.com/#search=formdata - 我认为使用它比使用它更安全:) (2认同)

wht*_*lnv 7

我在使用angular + laravel实现文件上传时遇到了麻烦.每次我尝试发送多部分表单时,服务器都不会收到表单数据,即使它已被发送,或者我认为.我终于找到了这一篇文章,解决了我的所有问题.

长话短说,这是$ 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) {

});
Run Code Online (Sandbox Code Playgroud)

rolin.tencent的另一个答案.深圳还提到设置Content-Type为undefined让浏览器将其排序.