【问题标题】:Providing Content-MD5 header through paperclip to S3通过回形针向 S3 提供 Content-MD5 标头
【发布时间】:2015-07-10 08:19:18
【问题描述】:

我正在使用 Paperclip 将文件直接上传到我的 rails web 应用程序的 s3。 我目前正在尝试利用亚马逊 s3 中集成的 md5 检查来验证上传是否成功进行。 Paperclip 提供了一个 s3_headers 哈希,您可以使用您需要的任何字段填充它。 Content-Type 会自动填充。 Content-MD5 需要进行 Base64 编码,所以我以这种方式提供:

:s3_headers => {:content_md5 => Base64.strict_encode64(md5sum)},

我使用 strict_encode64 是因为 encode64 添加了不必要的尾随 \n。 使用此设置,我总是从 aws-sdk 收到 InvalidDigest 错误,即使回形针正确显示了计算的标题。我还尝试使用普通的、未编码的 md5sum,结果相似。

【问题讨论】:

    标签: ruby-on-rails amazon-s3 paperclip


    【解决方案1】:

    如果 md5sum 是一串十六进制数字,如 Linux 应用程序 md5sum 的 std 输出,试试这个:

    :s3_headers => {:content_md5 => [[md5sum].pack("H*")].pack("m0") }
    

    例如,从 rails 控制台:

    > md5sum = "7d592a3129ab6a867cf6e2eb60f9ef83"
    > [[md5sum].pack("H*")].pack("m0")
     => "fVkqMSmraoZ89uLrYPnvgw=="
    

    【讨论】:

      【解决方案2】:

      获取源的 md5,将每个(字符对)从字符串转换为十六进制(2 个字节变为 1 个字节);然后base64编码,你会没事的。

      【讨论】:

        猜你喜欢
        • 2018-04-09
        • 2016-12-29
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多