ng-file-upload将数组发送到数据库

时间:2017-06-07 03:32:42

标签: angularjs arrays upload ng-file-upload

我想通过使用ng-file-upload上传我拥有的数据数组,但是如果我重复一遍,我的数据库只能获得最后一张图片,任何人都可以知道我的代码有什么问题吗?

这是我的代码

gamm(y ~ s(Group, bs = "re"))

portfolio_image应该获取所有图像,但现在它只从portfolio_images_array获取最后一个图像。 要将数据添加到portolio_image_array,我使用以下代码:

$scope.send = function () {
    console.log("aaa " + $scope.file);
    console.log("files total: " + $scope.portfolio_images_array.length);

    if ($scope.file && $scope.file1 && $scope.portfolio_images_array.length > 0) {
            Upload.upload({
                url: 'upload_url',
                data: {
                    user_id: 7,
                    profile_photo: $scope.file, 
                    id_card_photo: $scope.file1,
                    name: $scope.name, 
                    introduction: $scope.introduction,
                    portfolio_image: $scope.portfolio_images_array
                }
            }).then(function (resp) {
                console.log('Success ');
            }, function (resp) {
                console.log('Error status: ' + resp.status);
            }, function (evt) {
                var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
                console.log('progress: ' + progressPercentage + '% ');
            });
        }
};

请帮助我,谢谢

2 个答案:

答案 0 :(得分:0)

Upload.upload实际上是一个http请求。

您正在做的是循环遍历所有数组并为每个文件发出http请求。

这已经非常糟糕了,您应该使用如下语法直接发送数组:

Upload.upload({
            url: storageService.Address_of_your_server + '/your/route',
            file: file,
            arrayKey: '',
            data: data,
        }).success(function (resp) {
            cbfun(resp);
        });
}

where file是你想要在同一时间发送的数据的文件和数据数组。

您只收到最后一张图片的事实有点奇怪。

我想到了两个想法:

  • 如果在请求未完成时再次呼叫请求,则上传服务会停止请求。

  • 当您在循环中使用异步函数时以同步方式循环。因此,javascript非常快速地循环,并且在发送请求之前i会增加。

但我并不认为这是第二种可能性,因为只有在你的承诺回调中使用i变量时才会发生这种情况。(/ p>

编辑:

为什么需要使用ArrayKey:

这是为了适应服务器实现期望'[i]'或'[]'或''(具有相同密钥的多个条目)格式的数组数据对象密钥。

因此,如果您不使用它,服务器部分将无法理解请求的格式。

根据official doc

此外,如果您使用的是NodeJS,几乎可以肯定您在后端使用了multer中间件。

因此,你应该在后面有这样的路线:

router.post('/your/route', upload.array('file'), function(req, res){
//Your files are in this variable
var files = req.files
}

答案 1 :(得分:0)

我找到了答案,我们只需要添加arrayKey,这里是代码

    $scope.send = function () {
    if ($scope.file && $scope.file1 && $scope.portfolio_images_array.length > 0) {
        Upload.upload({
            url: 'uploadURL',
            arrayKey: '',
            data: {
                user_id: 7,
                profile_photo: $scope.file, 
                id_card_photo: $scope.file1,
                name: $scope.name, 
                introduction: $scope.introduction,
                portfolio_image: $scope.portfolio_images_array
            }
        }).then(function (resp) {
            console.log('Success ');
        }, function (resp) {
            console.log('Error status: ' + resp.status);
        }, function (evt) {
            var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
            console.log('progress: ' + progressPercentage + '% '); 
        });
    }
};