Tengo una función que realiza una solicitud de API que contiene la URL de un archivo nuevo que acabo de cargar en AWS S3. Y tengo una función que solo sube el archivo a S3.
Tengo problemas para devolver esta URL del archivo cargado.
Aquí está mi código:
myfunction(){ let file; // assume the file is already set let filename; // assume the filename is already set let s3URL = uploadFile(file, filename); console.log(s3URL); // this is returning a ManagedUpload object, I dont know how to get the URL from there makeAPIRequest(s3URL); } async uploadFile(file, fileName) { // S3 is from --> import * as S3 from 'aws-sdk/clients/s3'; const s3 = new S3( { accessKeyId: 'myaccesskeyid', secretAccessKey: 'mysecretaccesskey', region: 'us-east-1' } ); const params = { Bucket: 'my-bucket', Key: 'MyDirectory/' + fileName, Body: file }; return await s3.upload(params, function(err, data) { console.log(err, data); return data; // URL is here inside data.Location }); }Aquí está el documento SDK con el ejemplo de carga: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property
Gracias por adelantado :)
Parece que desea que su función uploadFile devuelva los datos de la devolución de llamada s3.upload , en lugar del resultado de la llamada en sí. Puede hacerlo devolviendo su propia Promesa y resolviéndola con los datos que necesita:
myfunction(){ // ... // Remember to add `await` here const s3Data = await uploadFile(file, filename); const s3URL = s3Data.Location; // ... } async uploadFile(file, fileName) { // ... return new Promise((resolve, reject) => { s3.upload(params, function(err, data) { if (err) { reject(err); } else { resolve(data); } }); }); }