【问题标题】:Copy file from one AWS S3 Bucket to another bucket with Node使用 Node 将文件从一个 AWS S3 存储桶复制到另一个存储桶
【发布时间】:2018-11-22 16:49:54
【问题描述】:

我正在尝试使用 Node.js 将文件从 AWS S3 存储桶复制到另一个存储桶。问题是如果文件名没有空格,例如:“abc.csv”,它工作正常。 但如果我要复制的文件在文件名中有空格,例如:“abc xyz.csv”。它抛出以下错误。

“指定的键不存在。” "NoSuchKey:指定的键不存在。 在 Request.extractError (d:\Projects\Other\testproject\s3filetoarchieve\node_modules\aws-sdk\lib\services\s3.js:577:35)

下面是提供的代码。

return Promise.each( files, file => {
        var params = {
            Bucket: process.env.CR_S3_BUCKET_NAME, 
            CopySource: `/${ process.env.CR_S3_BUCKET_NAME }/${ prefix }${ file.name}`, 
            Key: `${ archieveFolder }${ file.name }`
        };
        console.log(params);
        return new Promise(( resolve, reject) => {
            s3bucket.copyObject(params, function(err, data) {
                if (err){
                    console.log(err, err.stack); 
                    debugger
                } else {
                    console.log(data); 
                    debugger
                }             
            });
        });
    }).then( result => {
        debugger
    });

早期帮助将是非常可观的。谢谢。

【问题讨论】:

    标签: node.js amazon-web-services amazon-s3


    【解决方案1】:

    我认为问题正是文件名中的那个空格。

    S3 密钥必须经过 url 编码,因为它们需要以 URL 形式访问。 有一些软件包可以帮助您进行 url 格式设置,例如 speakingUrl 或者你可以尝试自己写一些,如果你想保持友好,也许只是用破折号(_ or -)替换空格(\s)。

    如果您不介意,可以直接encodeURIComponent(file.name)

    希望对你有帮助!

    【讨论】:

    猜你喜欢
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2020-05-29
    • 1970-01-01
    • 2017-04-14
    • 2020-09-15
    相关资源
    最近更新 更多