#javascript #angularjs #amazon-web-services #amazon-s3
Вопрос:
Всем привет, я хочу загрузить несколько файлов в Aws S3 с помощью javascript sdk, я использую AngularJS, я написал код для загрузки одного файла, и это работает нормально, но проблема, с которой я сталкиваюсь, заключается в :-
1). Мне нужно просмотреть все файлы и загрузить файлы один за другим.
2). Я присваиваю имя файла загружаемому файлу, как я буду хранить несколько имен файлов в одном файле $scope.var.
3). Сначала я должен загрузить все файлы, затем мне нужно вызвать функцию отправки, чтобы вызвать лямбда-api для отправки моих данных в качестве полезной нагрузки json. Я не могу вызвать функцию отправки в цикле, как я буду с этим справляться.
Расход :- от формы пользователю выбрать несколько файлов, нажмите на кнопку «Отправить», первая отправка на S3 функция будет загружать все файлы на S3, и я генерировать имена файлов, временные метки, после загрузки в S3 еще один вызов API будет и данных, включая все формы, сведения имена файлов будут отправлены в этот API как JSON полезной нагрузки.
Мой код —
if($scope.Form.$valid===true){
AWS.config.update({
region: "us-east-2",
credentials: new AWS.CognitoIdentityCredentials({
IdentityPoolId: "xxxxxx"
})
});
$('#requestButton').html("Submitting..").attr('disabled',true);
var s3 = new AWS.S3({
apiVersion: 'xxxx-xx-xx',
params: {Bucket: "xxxx"}
});
var files = document.getElementById('fileUpload').files;
if(files.length == 0){
// $scope.submitForm(data);
}
if (files){
for (var i = 0; i < files.length; i ){
var file = files[i];
var fileName = file.name.split('.')[i] new Date().getTime() "." file.name.split('.').pop();
data.file= fileName;
var filePath = '' fileName;
var fileUrl = 'https://xxxx.amazonaws.com/xxxx/' filePath;
s3.upload({
Key: filePath,
Body: file,
ACL: 'private'
}, function(err, data2) {
if(err) {
toastr["error"]("Cannot submit your form.", "Failed!");
$('#requestButton').val("Submit").attr('disabled',false);
reject('error');
console.log("FAILED")
}
console.log(data);
$scope.submitForm(data);
}).on('httpUploadProgress', function (progress) {
var uploaded = parseInt((progress.loaded * 100) / progress.total);
$("progress").attr('value', uploaded);
});
}
}
}
Мой вопрос — как я могу добавить больше имен файлов в объект data.file, а во-вторых, где я должен вызвать submitForm()
функцию «Я хочу вызвать форму отправки» только один раз после загрузки всех файлов, пожалуйста, помогите мне.