问题
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 s3://zz/aa
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#copyObject-property
I refer to above link,But I don't know how to do it using node.js
any Idea?
回答1:
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-Idfor each S3 Key.NOTE: If versioning is not enabled, then you can ignore STEP-2.Call
copyObjectfor each S3 Key and theVersion-Idobtained in Step-1 and Step-2 respectively.Version-idis optional.
回答2:
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();
....
}
回答3:
Note that encodeURI is required if the filename has special chars
await S3.copyObject({
Bucket: bucketName,
CopySource: encodeURI(`/${sourceBucketName}/${filename}`),
Key: filename,
}).promise()
回答4:
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.
来源:https://stackoverflow.com/questions/46947288/how-to-copy-the-object-from-s3-to-s3-using-node-js