在Angular JS中同时发送表单数据和上传文件

时间:2016-08-18 22:30:41

标签: javascript php angularjs multipartform-data

我在互联网上尝试了所有解决方案,但无法取得成功。

我可以使用Angular JS上传图像文件。但这次我需要额外的值来保存服务器上的图像。我正在尝试发送两个数组。其中一个是文件项,另一个是带文件夹信息的简单发布数据。

subjectDetails.addData = function(post_value){
    var defer = $q.defer();

    var fd = new FormData();
    fd.append('files', post_value.files);
    fd.append('data', post_value.data);

    //fd.append("data", 'something');
    //fd.append("data", JSON.stringify(post_value.data));


    $http.post($rootScope.defaultApiPath + '/saveItem', fd, {
        withCredentials : false,
        transformRequest: angular.identity,
        headers: {'Content-Type': undefined}
    })
    .success(function(response, status){
        defer.resolve(response);
    })
    .error(function(error, status){
        defer.reject(error);
    });


    return defer.promise;
};

当我发布它时,我可以使用$ _FILES获取图像文件,但$ _POST变量为NULL。

我试过

var_dump($_POST); //NULL
var_dump($_POST['data']); //NULL
var_dump($_FILES); //shows only the file info. The other array is not in it

修改

我找到了原因。问题不在于javascript。我在服务器端使用Slim Framework,而Slim Framewrok无法解析FormData对象。当我尝试将FormData对象发布到一个简单的PHP文件中时,它可以工作。但是使用Slim Framework 3它无法正常工作

我试过

$request->getBody(); //Still NULL
$request->getParsedBody(); //Still Null

1 个答案:

答案 0 :(得分:0)

您可以发送多部分表单数据,这是一个很棒的plugin,看看这个fiddle这可以将图像和数据一起发送到您的上传控制器。编辑您的帖子并向我们展示服务器端的内容以帮助您

 file.upload = Upload.upload({
      url: 'YOUR UPLOAD URL GOES HERE',
      data: {username: $scope.username, file: file},
    });

更改服务器URL并查看数据,您的数据和文件都可以一起发送