Hola a todos, quiero cargar varios archivos en Aws S3 usando javascript sdk, estoy usando AngularJs, he escrito el código para cargar un solo archivo y funciona bien, pero el problema que tengo es:
1). Necesito recorrer todos los archivos y cargarlos uno por uno.
2). Estoy asignando un nombre de archivo al archivo que subo. ¿Cómo almacenaré varios nombres de archivo en un solo $scope.var ?
3). Primero tengo que cargar todos los archivos y luego llamar a la función Enviar para llamar a lambda api para enviar mis datos como carga útil json. No puedo llamar a la función de envío en un bucle, ¿cómo voy a lidiar con esto?
Flujo: - Desde un formulario, el usuario seleccionará varios archivos, haga clic en el botón para enviar, primero se llamará a la función de carga a s3 para cargar todos los archivos a s3 y estoy generando los nombres de esos archivos por marcas de tiempo, después de cargar a s3 otra llamada api sucederá y los datos que incluyen todos los datos del formulario + nombres de archivo se enviarán a esa API como carga útil json.
Mi código -
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); }); } } } Mi pregunta es: ¿cómo puedo agregar más nombres de archivos en el objeto data.file y la segunda es dónde debo llamar a submitForm() ? Quiero llamar a la función de formulario de envío solo una vez después de cargar todos los archivos. Por favor, ayúdenme.