ruby - 尝试存储临时文件时的 Aws::S3::Errors::BadDigest

标签 ruby amazon-s3 temporary-files digest

我有以下片段:

tempfile = Tempfile.new(export_file.filename)
begin
  tempfile.write(contents)
  file_storage_service.store(export_file.filename, tempfile)
ensure
  tempfile.close!
end

store方法如下:

def store(filename, file)
  client = Aws::S3::Client.new(options)
  object = Aws::S3::Object.new(bucket_name, filename, client: client)
  object.upload_file(file)
end

我的问题是,我似乎在我的一台云计算机上遇到了 Aws::S3::Errors::BadDigest 错误,但是本地这按预期工作.

我相信在调用 store 方法时临时文件未链接,导致 AWS 比较两个不同的摘要,但我对此不是很确定。我在两台机器上都有 Ruby 2.1.6,一台运行 OS X 的本地机器和一台运行 Linux 的云端机器。

我该怎么做才能解决这个问题?问题的原因是什么?

P.S.:我在临时文件上尝试了 close!close,结果相同。

最佳答案

似乎 S3 的 upload_file 需要一个光标重置的文件。在调用 store 之前调用 tempfile.rewind 可以解决这个问题。

关于ruby - 尝试存储临时文件时的 Aws::S3::Errors::BadDigest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34292011/

相关文章:

ruby-on-rails - 升级到 RSpec 3 并遵循弃用通知会导致 "undefined method ' 允许'"

ruby-on-rails - Ruby Net::HTTP::Get 和 JSON 响应

python - 首先获取最新的 S3 key

ruby - 在 Ruby 中如何解析负数?

ruby-on-rails - Ruby on Rails 提交按钮

ios - 如何从 Amazon S3 下载 - iOS

scala - 使用 spark 和 scala 将文件写入 S3 非常慢。有什么更好的方法来优化它?

PHP tmpfile() 返回 false

python - 长时间运行的子进程退出后清理临时文件夹