【问题标题】:Ignore meta characters in s3 file name忽略 s3 文件名中的元字符
【发布时间】:2021-02-12 03:13:11
【问题描述】:

我正在尝试将数据从 s3 复制到 Aurora 并使用以下命令来执行此操作

aws_commons.create_s3_uri('mybucket','HourlyData/[20-10-2020]','us-east-1'),
aws_commons.create_aws_credentials('******', '***************', ''))

除了名称中带有方括号([])的文件外,所有文件都可以正常工作。 例如:HourlyData/[20-10-2020] 文件加载失败,而 HourlyData/20-10-2020 加载成功

当我从外部来源获取文件时,有没有办法解决这个问题? 加载名称中带有 [] 的文件时出现以下错误。

('ERROR', 'ERROR', 'XX000', 'HTTP 403. Permission denied. 检查存储桶或提供的凭据,因为它们可能不再有效。', 'SQL function "table_import_from_s3" statement 1', 'aws_s3 .c', '405', 'perform_import')

【问题讨论】:

    标签: python postgresql amazon-s3 amazon-aurora


    【解决方案1】:

    使用这些字符is not recommended

    具体来说,这些是“安全”字符:

    Forward slash (/)
    Exclamation point (!)
    Hyphen (-)
    Underscore (_)
    Period (.)
    Asterisk (*)
    Single quote (')
    Open parenthesis (()
    Close parenthesis ())
    

    在我链接的文档中,方括号被明确列为“要避免的字符”。

    因此,适当的策略可能是在传递文件名之前替换方括号。如果您以后需要 s3 对象与文件保持关联,则需要创建第二个函数来反转第一个替换。

    例如:

    def make_s3_safe_name(original_filename):
       return original_filename.replace('[', '(')).replace(']', ')')
    
    def recover_original_name(s3_safe_name):
       return s3_safe_name.replace('(', ']')).replace(')', ']')
    
    original_filename = 'HourlyData/[20-10-2020]'
    s3_safe_filename = make_s3_safe_name(original_filename)
    aws_commons.create_s3_uri('mybucket', s3_safe_filename,'us-east-1'),
    
    

    如果您的文件名包含其他不安全字符,最好使用更强大的编码系统,例如 base64。在 python 中,有一个模块同时提供了相关功能:base64.encode(string)base64.decode(string)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 2018-08-31
      • 2018-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多