通过回形针向S3提供Content-MD5标头

时间:2012-05-29 09:11:12

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

我正在使用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,结果相似。

2 个答案:

答案 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=="