我想知道如何使用node.js将对象从s3复制到s3 使用aws s3命令,可以按如下方式执行。
s3 cp --recursive s3://xx/yy s3://zz/aa
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#copyObject-property
我参考上面的链接,但我不知道如何使用node.js
任何想法?
答案 0 :(得分:5)
如果您只想复制一个对象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
});
如果要对存储桶中的所有对象进行递归执行,则
使用listObjectsV2 API列出存储桶中的所有对象键。
如果在 source-bucket 中启用了版本控制,并且您想要复制特定版本的密钥,请同时调用listObjectVersions API并获取每个S3密钥都有Version-Id
。
NOTE: If versioning is not enabled, then you can ignore STEP-2.
分别为每个S3 Key和步骤1和步骤2中获得的copyObject
调用Version-Id
。 Version-id
是可选的。
答案 1 :(得分:0)
s3.copyObject({
Bucket,
CopySource: `/${Bucket}/${Key}?versionId=${versionId}`,
Key,
}).promise()
如果您确实通过了versionId
,则看起来就是这样。
花了我比我更愿意承认的时间。
答案 2 :(得分:0)
请注意,如果文件名包含特殊字符,则str[str.size()]
是必需的
'\0'
答案 3 :(得分:0)
如果您要真正移动(不仅要复制,还要删除源文件)
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();
....
}