编程语言
首页 > 编程语言> > javascript – 如何使用AWS SDK for Node.js将Amazon S3中的所有对象从一个前缀复制/移动到另一个前缀

javascript – 如何使用AWS SDK for Node.js将Amazon S3中的所有对象从一个前缀复制/移动到另一个前缀

作者:互联网

如何将所有对象从一个前缀复制到另一个前缀?我已经尝试了所有可能的方法将一个镜头中的所有对象从一个前缀复制到另一个前缀,但似乎工作的唯一方法是循环遍历对象列表并逐个复制它们.这实在是效率低下.如果我在一个文件夹中有数百个文件,我是否需要拨打100个电话?

var params = {
         Bucket: bucket,
         CopySource: bucket+'/'+oldDirName+'/filename.txt',
         Key: newDirName+'/filename.txt',
 };
s3.copyObject(params, function(err, data) {
  if (err) {
      callback.apply(this, [{
          type: "error",
          message: "Error while renaming Directory",
          data: err
      }]);
  } else {
      callback.apply(this, [{
          type: "success",
          message: "Directory renamed successfully",
          data: data
      }]);
  }
});

解决方法:

您需要创建一个AWS.S3.listObjects()来列出具有特定前缀的对象.但是你是正确的,因为你需要为每个要从一个存储桶/前缀复制到相同或另一个存储桶/前缀的对象进行一次调用.

您还可以使用async之类的实用程序库来管理您的请求.

var AWS = require('aws-sdk');
var async = require('async');
var bucketName = 'foo';
var oldPrefix = 'abc/';
var newPrefix = 'xyz/';
var s3 = new AWS.S3({params: {Bucket: bucketName}, region: 'us-west-2'});

var done = function(err, data) {
  if (err) console.log(err);
  else console.log(data);
};

s3.listObjects({Prefix: oldPrefix}, function(err, data) {
  if (data.Contents.length) {
    async.each(data.Contents, function(file, cb) {
      var params = {
        CopySource: bucketName + '/' + file.Key,
        Key: file.Key.replace(oldPrefix, newPrefix)
      };
      s3.copyObject(params, function(copyErr, copyData){
        if (copyErr) {
          console.log(err);
        }
        else {
          console.log('Copied: ', params.Key);
          cb();
        }
      });
    }, done);
  }
});

希望这可以帮助!

标签:javascript,node-js,amazon-web-services,amazon-s3,aws-sdk
来源: https://codeday.me/bug/20190930/1834946.html