当前位置: 首页 > 知识库问答 >
问题:

使用节点将文件从一个AWS S3存储桶复制到另一个存储桶

慎望
2023-03-14

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

“指定的密钥不存在。”“NoSuchKey:指定的密钥不存在。应请求。extractError(d:\Projects\Other\testproject\s3filetoarchive\node\u 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
    });

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

共有1个答案

方琦
2023-03-14

我认为问题恰恰在于文件名中的空格。

S3密钥必须是url编码的,因为它们需要以url形式可访问。有一些软件包可以帮助你设置url格式,比如speakingUrl,或者你可以尝试自己编写一些,如果你想保持友好,可以简单地将空格(\s)替换为破折号(uu或-)。

如果你不介意的话,你可以简单地encodeURIComponent(file.name)

希望有帮助!

 类似资料: