我正在使用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,结果相似。
答案 0 :(得分:0)
获取源代码的md5,将每个(字符对)从字符串转换为十六进制(2个字节变为1个字节);然后base64编码,你会没事的。
答案 1 :(得分:0)
如果md5sum是一个十六进制数字的字符串,就像Linux应用程序md5sum
的std输出一样,试试这个:
:s3_headers => {:content_md5 => [[md5sum].pack("H*")].pack("m0") }
例如,从rails控制台:
> md5sum = "7d592a3129ab6a867cf6e2eb60f9ef83"
> [[md5sum].pack("H*")].pack("m0")
=> "fVkqMSmraoZ89uLrYPnvgw=="