使用纯Ruby脚本进行上传到S3

kst*_*tis 9 ruby file-upload progress amazon-s3 aws-sdk

这个问题与这个问题有关:使用Ruby aws-sdk跟踪上传文件到S3的进度,

然而,由于没有明确的解决方案,我想知道是否有更好/更简单的方法(如果有的话)在2018年使用Ruby获取S3的文件上传进度?

在我目前的设置中,我基本上创建了一个新的Resource,获取我的桶和调用,upload_file但我还没有找到任何传递块的选项,这将有助于产生某种进展.

...
@connection = Aws::S3::Resource.new
@s3_bucket = @connection.bucket(bucket)
@s3_bucket.object(path).upload_file(data, {acl: 'public-read'})
...
Run Code Online (Sandbox Code Playgroud)

有没有办法使用最新的sdk-for-ruby v3?

任何帮助(或者更好的小例子)都会很棒.

Jul*_*lik 9

在Treps :http://stackoverflow.com/a/12147709/153886中给出的示例并不是我能看到的东西 - 只需将它们连接在一起.SDK根本不提供用于传递所有操作的进度详细信息的功能.另外,Trevor是AWS的Ruby SDK的维护者,所以我相信他的判断.

扩展他的榜样

bar = ProgressBar.create(:title => "Uploading action", :starting_at => 0, :total => file.size)
obj = s3.buckets['my-bucket'].objects['object-key']
obj.write(:content_length => file.size) do |writable, n_bytes|
  writable.write(file.read(n_bytes))
  bar.progress += n_bytes
end
Run Code Online (Sandbox Code Playgroud)

如果你想在upload_file方法中有一个进度块我相信你需要打开一个PR到SDK.Ruby(或任何其他运行时)的情况并非如此奇怪,因为例如,HTTP客户端库中可能存在使用IO.copy_streambody参数到目标套接字的优化,而不会中继进度任何地方.