述べたように、ファイルをs3にアップロードしようとしています
require 'digest/md5'
require 'base64'
require 'aws-sdk'
def digest f
f.rewind
Digest::MD5.new.tab do |dig|
f.each_chunk{|ch| dig << ch}
end.base64digest
ensure
f.rewind
end
file = File.new(compress file) #file zipped with zip/zip
total = file.size
digest = digest(file)
s3 = AWS::S3::new(:access_key_id => @access_key_id, :secret_access_key
=> @secret_access_key)
bucket = s3.buckets['mybucket']
bucket.objects["myfile"].write :content_md5 => digest, :content_length
=> total do |buf,len|
buf.write(file.read len)
end
しかし、私は常に AWS::S3::Errors::BadDigest 例外を取得します
:content_md5 を渡さずにファイルをアップロードしようとすると、すべてがうまくいき、ダウンロードがアーカイブされ、正しく開きます。
また、これはruby 1.9.3では失敗することがわかりましたが、1.9.2ではうまく機能します