Necesito mover un archivo en el depósito de AWS s3 a otra ubicación, ejemplo:
Revisé la documentación:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html , pero no encontré ninguna mención de mover o actualizar el archivo (estoy pensando que podría actualizar la ruta de la clave del archivo...).
Hasta ahora, parece que necesito copiar el archivo y luego eliminar el anterior. ¿Hay una forma más sencilla de hacerlo?
Mi código actual que copia y luego elimina el archivo antiguo:
function moveFileInAws(fromLocation, toLocation, callback) { awsSdk.copyObject({ Bucket: BUCKET_NAME, ACL: 'public-read', CopySource: fromLocation, Key: toLocation }, (err, data) => { if (err) { console.log(err) return callback("Couldn't copy files in directory") } // callback() awsSdk.deleteObject({ Key: fromLocation }, (err, data) => { if (err) { console.log("Couldn't delete files in directory") console.log(err) return callback("Couldn't delete files in directory") } callback() }) }) }Basado en la respuesta aquí: AWS S3: mueva un objeto a una carpeta diferente en la que el usuario @Michael-sqlbot comenta:
Esto se debe a que S3, en sí mismo, no tiene una operación atómica de movimiento o cambio de nombre... por lo que realmente no hay una alternativa.
Y los documentos aquí: https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/examples-s3-objects.html#copy-object (para el SDK de Java, pero parece ser útil aquí) que señala:
Puede usar copyObject con deleteObject para mover o cambiar el nombre de un objeto, primero copiando el objeto con un nuevo nombre (puede usar el mismo depósito como origen y destino) y luego eliminando el objeto de su ubicación anterior.
Parece que la infraestructura de S3 simplemente no admite mover o cambiar el nombre en una sola operación. Debes copiar y luego borrar.
Amazon S3 no proporciona una API para mover o cambiar el nombre de un objeto de un depósito a otro en un solo paso.
Como en su ejemplo, puede usar copyObject con deleteObject para mover o cambiar el nombre de un objeto, primero copiando el objeto con un nuevo nombre (puede usar el mismo depósito como origen y destino) y luego eliminando el objeto de su ubicación anterior .
Para obtener más información, consulte Realización de operaciones en objetos de Amazon S3.
No estoy nada familiarizado con el SDK de JavaScript que está utilizando, pero al usar aws cli, hay:
aws s3 mv s3://bucket/folder/file s3://bucket/folder2/fileque parece que haría lo que quieres. No estoy seguro acerca del SDK de JavaScript.