I would like to know how to copy the object from s3 to s3 using node.js With the aws s3 command, It could be executed as follows.
s3 cp --recursive s3://xx/yy s
If you want to really move (so not just copy, but in addition remove the source file)
const moveAndDeleteFile = async (file,inputfolder,targetfolder) => {
const s3 = new AWS.S3();
const copyparams = {
Bucket : bucketname,
CopySource : bucketname + "/" + inputfolder + "/" + file,
Key : targetfolder + "/" + file
};
await s3.copyObject(copyparams).promise();
const deleteparams = {
Bucket : bucketname,
Key : inputfolder + "/" + file
};
await s3.deleteObject(deleteparams).promise();
....
}
If you just want to copy one object copyObject API.
var params = {
Bucket: "destinationbucket",
CopySource: "/sourcebucket/sourceKeyName",
Key: "targetKeyName"
};
s3.copyObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
If you want to perform recursively for all objects in a bucket, then
List all the object keys in a bucket using the listObjectsV2 API.
If versioning is enabled in the source-bucket and you want to copy a specific version of the key, Invoke the listObjectVersions API as well and get the Version-Id
for each S3 Key.
NOTE: If versioning is not enabled, then you can ignore STEP-2.
Call copyObject
for each S3 Key and the Version-Id
obtained in Step-1 and Step-2 respectively. Version-id
is optional.
s3.copyObject({
Bucket,
CopySource: `/${Bucket}/${Key}?versionId=${versionId}`,
Key,
}).promise()
if you do pass a versionId
this is what it looks like.
took me longer than i'd care to admit to figure out.
Note that encodeURI
is required if the filename has special chars
await S3.copyObject({
Bucket: bucketName,
CopySource: encodeURI(`/${sourceBucketName}/${filename}`),
Key: filename,
}).promise()