我正在尝试使用 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
});
早期的帮助将非常感激。谢谢。
我认为问题正是在于文件名中的空格。
S3 密钥必须进行 url 编码,因为它们需要以 URL 形式访问。
有一些软件包可以帮助您进行 url 格式化,例如发言网址或者你可以尝试自己写一些,也许只是简单地替换空格(\s
) 带有破折号 (_ or -
)如果你想保持友好。
如果你不介意的话,你可以简单地encodeURIComponent(file.name)
希望能帮助到你!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)