在S3中将文件从一个文件夹移动到另一个文件夹

6

我首先尝试将文件复制到其他文件夹中,但无法删除。如何只有在文件被成功复制到目标文件夹后再删除它。

    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");
            }
        });    
    }

1
简单概括一下,您想将文件从源文件夹复制到目标文件夹,然后从源文件夹中删除该文件? - Amit Baranes
是的,确切地说。我想将文件从S3文件夹复制到目标文件夹,并从源文件夹中删除它。 - Bhargav Teja
1
您并没有发布使用上述代码的代码,因此很难说哪里出了问题。copyFile 调用自身似乎有些奇怪。一般来说,这很容易实现 - 复制文件,如果没有抛出异常,则删除该文件 - 工作完成。 - 404
笔误错误,copyFile 应该调用 deleteFile(),但我仍然无法删除。 - Bhargav Teja
2个回答

15

由于您没有与我们共享完整的代码,我创建了以下lambda函数示例,该示例将特定文件从源文件夹复制到目标文件夹,然后从源文件夹中删除该文件。就我所知,它看起来像是您的lambda缺少一些参数和一些promises。

代码片段:

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}`)

}


};

1
尝试在参数中添加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");
            }
        });    
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接