Aws::S3::Errors::BadDigest 尝试存储临时文件时
Aws::S3::Errors::BadDigest while trying to store a Tempfile
我有以下片段:
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
可解决此问题。
好的伙计们,我的问题更深了。使用 tempfile.rewind
错误消失了,但是直接对文件所做的更改没有反映在内存中,所以我没有使用倒带,而是最终使用:
tempfile.close
tempfile.open
完全解决了我的问题!
我有以下片段:
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
可解决此问题。
好的伙计们,我的问题更深了。使用 tempfile.rewind
错误消失了,但是直接对文件所做的更改没有反映在内存中,所以我没有使用倒带,而是最终使用:
tempfile.close
tempfile.open
完全解决了我的问题!