16

我正在尝试设置一个表单,以使用 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;
    });
},

我有一种感觉,我错过了一些非常小的东西,有人可以提供一些帮助吗?

4

4 回答 4

14

我遇到了类似的问题。

解决方案是使用 formData

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

并更换

data: {
    file: $scope.file
}

data: {
    formdata
}
于 2013-12-12T10:43:10.607 回答
8

我在使用 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) {

});

rolin.tencent.Shenzhen 的另一个答案也提到Content-Typeundefined让浏览器整理出来的设置。

于 2015-11-27T08:01:29.490 回答
3

数据应该是data: $scope.file

重要的是:您应该设置'Content-Type': undefined让浏览器设置正确的内容类型。

于 2014-12-05T02:56:59.220 回答
1

你可以使用这个插件,它也是高度可配置的:https ://github.com/danialfarid/ng-file-upload

于 2016-07-07T17:12:10.043 回答