我有一个节点应用程序,可以使用他们的SDK将文件上传到AWS S3存储。
我有一个名为:File-type (14).csv
的文件
我上传如下:
const AWS = require(`aws-sdk`)
const params = {
Bucket: `MY_BUCKET`,
Key: `path/File-type (4).csv`,
Body: fileContent
}
// Upload
new AWS.S3({/* config */})
.upload(params, (err, response) => {
const location = response.Location
})
然后,我使用location
常量将其存储在数据库中。但链接不起作用,当我去AWS控制面板检查时,它会给它一个不同的链接。
From location: https://s3.amazonaws.com/bucket/path/File-type%20%281%29.csv
From AWS: https://s3.amazonaws.com/bucket/path/File-type%2520%25281%2529.csv
请注意File-type
后的名称差异
我已经在字符串上尝试了encodeURI
(预上传,在params.Key
上(,但这并没有删除()
,因此仍然会产生错误。我可以用正则表达式删除所有非字母数字值,但这感觉很糟糕,或者这是唯一的解决方案,或者我遗漏了什么?
AWS SDK需要遵守字符规则。它们不会告诉你或解决问题,也不会提供错误的链接。
在你上传之前,你需要清理你的路径,以避免";不被接受";字符,可以在这里找到:
https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html
所以在上传之前一定要清理好你的路径。