如何使用 ruby 有效地将二进制数据写入 gcs?

How do I write data binary to gcs with ruby efficiently?

我想将二进制数据直接上传到 GCP 存储,而不是将文件写入磁盘。下面是我创建的代码片段,用于达到我将要达到的状态。

require 'google/cloud/storage'

bucket_name = '-----'

data = File.open('image_block.jpg', 'rb') {|file| file.read }


storage = Google::Cloud::Storage.new("project_id": "maybe-i-will-tell-u")
bucket  = storage.bucket bucket_name, skip_lookup: true

现在我想直接把这个data放到gcs上的一个文件里,而不用把文件写到磁盘上。

有没有一种有效的方法可以做到这一点?

我尝试了以下代码

to_send = StringIO.new(data).read

bucket.create_file to_send, "image_inder_11111.jpg"

但这会引发一个错误

/google/cloud/storage/bucket.rb:2898:in `file?': path name contains null byte (ArgumentError)
    from /home/inder/.gem/gems/google-cloud-storage-1.36.1/lib/google/cloud/storage/bucket.rb:2898:in `ensure_io_or_file_exists!'
    from /home/inder/.gem/gems/google-cloud-storage-1.36.1/lib/google/cloud/storage/bucket.rb:1566:in `create_file'
    from champa.rb:14:in `<main>'

正如@stefan 所建议的,它应该是 to_send = StringIO.new(data),即没有 .read(这将再次 return 一个字符串)