0

述べたように、ファイルを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ではうまく機能します

4

1 に答える 1

0

ダイジェスト機能をに変更することで修正されました

デフダイジェストf

Digest::MD5.file(f.path).base64digest

終わり

問題は、渡されたファイルが開いていたという事実にあったと思います

于 2012-11-27T20:50:36.907 に答える