如何使用适用于Node.js的AWS开发工具包将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 = {
Bucket: bucketName,
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);
}
});
希望这会有所帮助!
如何使用适用于Node.js的AWS开发工具包将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 = {
Bucket: bucketName,
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);
}
});
希望这会有所帮助!