3

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

4

2 回答 2

1

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

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

例如,从 rails 控制台:

> md5sum = "7d592a3129ab6a867cf6e2eb60f9ef83"
> [[md5sum].pack("H*")].pack("m0")
 => "fVkqMSmraoZ89uLrYPnvgw=="
于 2015-07-10T00:19:18.990 回答
0

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

于 2013-02-14T10:19:53.863 回答