代码之家  ›  专栏  ›  技术社区  ›  denislexic

NODE AWS S3上传过程中的文件命名问题

  •  0
  • denislexic  · 技术社区  · 3 年前

    我有一个节点应用程序,可以使用他们的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 )但这并不能消除 () 因此仍然会产生错误。我可以用正则表达式删除所有非字母数字值,但这感觉很糟糕,或者这是唯一的解决方案,或者我遗漏了什么?

    0 回复  |  直到 3 年前
        1
  •  0
  •   denislexic    3 年前

    AWS SDK需要遵守字符规则。它们不会告诉你或解决问题,也不会提供错误的链接。

    在上传之前,您需要清理路径以避免出现“不接受”字符,这些字符可以在此处找到:

    https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html

    所以在上传之前一定要清理好你的路径。