IBM Cloud Object Storage 的 Fog/aws gem 不工作

Fog/aws gem for IBM Cloud Object Storage is not working

由于 Softlayer 或 IBM Cloud 已从基于 Swift 的对象存储迁移到基于 S3 的云对象存储。我正在使用 fog/aws 而不是 fog/softlayer。

下面是代码:

require 'fog/aws'
fog_properties = {
  provider: 'AWS',
  aws_access_key_id: username,
  aws_secret_access_key: api_key
}
@client = Fog::Storage.new(fog_properties)
@client.directories

但即使使用有效的密钥和 ID 也失败了。


<Error><Code>InvalidAccessKeyId</Code><Message>The AWS Access Key Id you provided does not exist in our records.\</Message><AWSAccessKeyId>####</AWSAccessKeyId><RequestId>####</RequestId><HostId>##</HostId></Error>

IBM COS 使用的端点是“https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints

当我尝试单独使用雾时(需要'fog')。它抛出以下错误:

Unable to activate google-api-client-0.23.9, because mime-types-2.99.3 conflicts with mime-types (~> 3.0) (Gem::ConflictError)

请建议如何解决这些问题。

https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints" This is not an endpoint but a list of endpoints in JSON.

为您的存储桶位置选择端点。 例如,如果您的存储桶位于 us-south,则 public 端点为 https://s3.us-south.cloud-object-storage.appdomain.cloud

以下代码适用于 IBM Cloud Objects Storage

properties = {
          region: region,
          endpoint: URI('https://s3.us-south.cloud-object-storage.appdomain.cloud'),
          credentials: Aws::Credentials.new(access_key_id, secret_access_key)
        }
        Aws.config.update(properties)
        @client = Aws::S3::Client.new

配置的属性也可以设置为 ENV 变量。

以下是对 COS 执行的一些基本操作。

列出所有 bucker 名称

@client.list_buckets.buckets.map(&:name)

创建存储桶

@client.create_bucket(bucket: )

上传文件

@client.put_object(bucket: , key: , body: )

下载文件

@client.get_object(bucket: , key: )

删除文件

@client.delete_object(bucket: , key: )

删除存储桶

@client.delete_bucket(bucket: )