如何使用node.js将对象从s3复制到s3

时间:2017-10-26 06:32:02

标签: node.js amazon-s3

我想知道如何使用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

任何想法?

4 个答案:

答案 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
 });

如果要对存储桶中的所有对象进行递归执行,则

  1. 使用listObjectsV2 API列出存储桶中的所有对象键。

  2. 如果在 source-bucket 中启用了版本控制,并且您想要复制特定版本的密钥,请同时调用listObjectVersions API并获取每个S3密钥都有Version-Id

    NOTE: If versioning is not enabled, then you can ignore STEP-2.

  3. 分别为每个S3 Key和步骤1和步骤2中获得的copyObject调用Version-IdVersion-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();
    ....
}