使用 Fog 时 Google 云存储中的额外对象

Extra object in Google Cloud Storage when using Fog

我正在按照 fog.io/storage 创建目录然后上传文件的示例进行操作。当我将我的文件推送到 Google 云存储时,一切都很好,除了总是有一个 "binary/octet-stream" 文件与我创建的最深的文件完全一样。

我的代码与 AWS 示例非常相似,因为我创建了一个目录,然后从该新目录创建了一个文件。目录结构创建正确,文件上传正确,但总是有一个额外的 0 字节文件。我的代码如下所示:

job_number = 100

connection = Fog::Storage.new({
  :provider                         => 'Google',
  :google_storage_access_key_id     => YOUR_GCE_ACCESS_KEY_ID,
  :google_storage_secret_access_key => YOUR_GCE_SECRET_ACCESS_KEY
})

directory = connection.directories.create(
  :key    => "test-project/uploads/#{job_number}",
  :public => false
)

file = directory.files.create(
  :key    => 'file.pdf',
  :content_type => 'application/pdf',
  :body   => File.open("/path/to/my/file.pdf"),
  :public => false
)

目录结构完美(存在 gs://test-project/uploads/100 文件夹)并且该目录中也存在 file.pdf 文件(gs://test-project/uploads/100/file.pdf).

问题在于:

directory = connection.directories.create(
  :key    => "test-project/uploads/#{job_number}",
  :public => false
)

命令运行,在 gs://test-project/uploads/100 有一个文件,还有一个目录 gs://test-project/uploads/100/。当我遍历代码时,connection.directories.create(...) 命令肯定会创建额外的文件,但我不知道为什么。

我还尝试在 connection.directories.create(...) 命令的键值中添加尾部斜杠,但这实际上会产生一个不同的目录结构问题,比这更糟糕(这不是不好,很烦人)。

有没有人看过这个或者知道如何通过 Fog 正确创建目录结构?

不是直接创建文件的目录,而是 create/get 基础 directory/bucket,然后使用其余目录结构保存文件。所以它看起来像这样:

job_number = 100

connection = Fog::Storage.new({
  :provider                         => 'Google',
  :google_storage_access_key_id     => YOUR_GCE_ACCESS_KEY_ID,
  :google_storage_secret_access_key => YOUR_GCE_SECRET_ACCESS_KEY
})

directory = connection.directories.create(
  :key    => "test-project",
  :public => false
)

file = directory.files.create(
  :key    => 'uploads/#{job_number}/file.pdf',
  :content_type => 'application/pdf',
  :body   => File.open("/path/to/my/file.pdf"),
  :public => false
)