Node.js 在s3中将文件从一个文件夹移动到另一个文件夹
首先,我试图将文件复制到其他文件夹中,但无法删除它。如何仅当文件复制到目标文件夹时才能删除该文件Node.js 在s3中将文件从一个文件夹移动到另一个文件夹,node.js,amazon-s3,aws-lambda,Node.js,Amazon S3,Aws Lambda,首先,我试图将文件复制到其他文件夹中,但无法删除它。如何仅当文件复制到目标文件夹时才能删除该文件 const s3Params = { Bucket: bucket, CopySource: bucket + '/' + objectkey, Key: 'processed-data/' + objectkey }; function copyFile() { s3.copyObject(s3Params,
const s3Params = {
Bucket: bucket,
CopySource: bucket + '/' + objectkey,
Key: 'processed-data/' + objectkey
};
function copyFile() {
s3.copyObject(s3Params, function (err, data) {
if (err) {
console.log(err);
}
else {
deleteFile();
}
});
}
function deleteFile() {
s3.deleteObject(s3Params, function (err, data) {
if (err) {
console.log(err, err.stack);
logs.push(err, err.stack);
}
else {
console.log("File moved successfully");
log.push("File moved successfully");
}
});
}
尝试在参数中添加
Delete
键,并将文件的键添加到该列表中。
然后s3.deleteObjects将删除该文件。我已经重新格式化了你的代码。试试看。
const s3Params = {
Bucket: bucket,
CopySource: bucket + '/' + objectkey,
Key: 'processed-data/' + objectkey,
Delete: { Objects: [] }
};
function copyFile() {
s3.copyObject(s3Params, function (err, data) {
if (err) {
console.log(err);
}
else {
s3Params.Delete.Objects.push({Key: s3Params.Key});
deleteFile();
}
});
}
function deleteFile() {
s3.deleteObjects(s3Params, function (err, data) {
if (err) {
console.log(err, err.stack);
logs.push(err, err.stack);
}
else {
console.log("File moved successfully");
log.push("File moved successfully");
}
});
}
由于您尚未与我们共享完整的代码,我创建了以下lambda函数示例,该示例将特定文件从源文件夹复制到目标文件夹,然后从源文件夹中删除该文件。据我所知,看起来你的lambda缺少了一些参数和承诺 代码段:
const aws = require('aws-sdk');
const s3 = new aws.S3();
const bucketName = 'Bucket Name'
const sourceFolder = 'Source Folder'
const fileName = 'File Name with extention'
const destFolder = 'Destination Folder'
const s3Params = {
Bucket: bucketName,
CopySource: `${bucketName}/${sourceFolder}/${fileName}`,
Key: `${destFolder}/${fileName}`
};
function copyFile() {
return s3.copyObject(s3Params).promise();
}
function deleteFile() {
return s3.deleteObject({ Bucket: bucketName, Key: `${sourceFolder}/${fileName}` }).promise();
}
exports.handler = async (event, context, callback) => {
try{
await copyFile().then(r => deleteFile());
console.log('All good')
}
catch(ex){ console.log(`Failed with the following exception : ${ex}`)
}
};
总结一下。。是否要将文件从源文件夹复制到目标文件夹,然后从源文件夹中删除该文件?是的,完全正确。。我想将文件从s3文件夹复制到目标文件夹,并将其从源文件夹中删除。您还没有发布使用上述代码的代码,因此很难说什么不起作用,假设是这样的话。似乎很奇怪,
copyFile
调用自己。一般来说,这很容易做到-复制文件,如果它没有引发异常,请删除文件-作业已完成。键入错误,copyFile应调用deleteFile(),但我仍然无法删除