Переместить файл из одной папки в другую папку в s3 - PullRequest
2 голосов
/ 05 ноября 2019

Сначала я пытаюсь скопировать файл в другую папку и не могу удалить его. Как я могу удалить файл, только если файл скопирован в папку назначения.

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

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Поскольку вы не предоставили нам общий код, я создал следующий лямбда-пример функции, который копирует определенный файл из исходной папки в папку назначения, а затем удаляет файл из исходной папки. насколько я могу судить, похоже, что в вашей лямбде не хватает некоторых параметров и некоторых обещаний.

Фрагмент кода:

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

}


};
0 голосов
/ 05 ноября 2019

Попробуйте добавить ключ 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");
            }
        });    
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...