使用 Node 将文件从一个 AWS S3 存储桶复制到另一个存储桶
Posted
技术标签:
【中文标题】使用 Node 将文件从一个 AWS S3 存储桶复制到另一个存储桶【英文标题】:Copy file from one AWS S3 Bucket to another bucket with Node 【发布时间】: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
);
早期帮助将是非常可观的。谢谢。
【问题讨论】:
【参考方案1】:我认为问题正是文件名中的那个空格。
S3 密钥必须经过 url 编码,因为它们需要以 URL 形式访问。
有一些软件包可以帮助您进行 url 格式设置,例如 speakingUrl
或者你可以尝试自己写一些,如果你想保持友好,也许只是用破折号(_ or -
)替换空格(\s
)。
如果您不介意,可以直接encodeURIComponent(file.name)
希望对你有帮助!
【讨论】:
嗨,encodeURIComponent(file.name) 对我有用。谢谢。 "CopySource
— (String) The name of the source bucket and key name of the source object, separated by a slash (/). Must be URL-encoded."
很高兴它有帮助!以上是关于使用 Node 将文件从一个 AWS S3 存储桶复制到另一个存储桶的主要内容,如果未能解决你的问题,请参考以下文章
如何使用aws java sdk将文件从S3存储桶从一个区域复制到另一个区域?