Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用node.js将对象从s3复制到s3_Node.js_Amazon S3 - Fatal编程技术网

如何使用node.js将对象从s3复制到s3

如何使用node.js将对象从s3复制到s3,node.js,amazon-s3,Node.js,Amazon S3,我想知道如何使用node.js将对象从s3复制到s3 使用AWSS3命令,它可以按如下方式执行 s3 cp --recursive s3://xx/yy s3://zz/aa 我参考了上面的链接,但我不知道如何使用node.js来实现 有什么想法吗?如果您只想复制一个对象API 如果希望对bucket中的所有对象递归执行,那么 使用API列出bucket中的所有对象键 如果在源bucket中启用了版本控制,并且您希望复制密钥的特定版本,那么也可以调用API并获取每个S3密钥的版本Id 注意

我想知道如何使用node.js将对象从s3复制到s3 使用AWSS3命令,它可以按如下方式执行

s3 cp --recursive s3://xx/yy  s3://zz/aa

我参考了上面的链接,但我不知道如何使用node.js来实现


有什么想法吗?

如果您只想复制一个对象API

如果希望对bucket中的所有对象递归执行,那么

  • 使用API列出bucket中的所有对象键

  • 如果在源bucket中启用了版本控制,并且您希望复制密钥的特定版本,那么也可以调用API并获取每个S3密钥的
    版本Id

    注意:如果未启用版本控制,则可以忽略步骤2。

  • 分别为步骤1和步骤2中获得的每个S3键和版本Id调用
    copyObject
    <代码>版本id是可选的

  • 
    s3.copyObject({
    水桶
    CopySource:`/${Bucket}/${Key}?versionId=${versionId}`,
    钥匙
    }).承诺
    
    如果您确实传递了一个
    versionId
    ,它就是这个样子


    我花了比我愿意承认的时间更长的时间来计算。

    请注意,如果文件名有特殊字符,则需要
    encodeURI

        await S3.copyObject({
            Bucket: bucketName,
            CopySource: encodeURI(`/${sourceBucketName}/${filename}`),
            Key: filename,
        }).promise()
    

    如果您真的想移动(因此不仅要复制,还要删除源文件)


    这可能会有所帮助-只是缺少copySource也必须包含bucket的内容。谢谢这是真实而重要的!我只是跌进了这个陷阱。我想最好的做法是总是
    encodeURI
    CopySource。否则,它可能会随时击中你。德国umlaut足以向我猛击
    网络错误:标题内容[“x-amz-copy-source”]
    中的无效字符。
        await S3.copyObject({
            Bucket: bucketName,
            CopySource: encodeURI(`/${sourceBucketName}/${filename}`),
            Key: filename,
        }).promise()
    
    const moveAndDeleteFile = async (file,inputfolder,targetfolder) => {
        const s3 = new AWS.S3();
    
        const copyparams = {
            Bucket : bucketname,
            CopySource : bucketname + "/" + inputfolder + "/" + file, 
            Key : targetfolder + "/" + file
        };
    
        await s3.copyObject(copyparams).promise();
    
        const deleteparams = {
            Bucket : bucketname,
            Key : inputfolder + "/" + file
        };
    
        await s3.deleteObject(deleteparams).promise();
        ....
    }