我想通过使用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 + '% ');
});
}
};
请帮助我,谢谢
答案 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 + '% ');
});
}
};