如何使用 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 一个字符串)
我想将二进制数据直接上传到 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 一个字符串)