1

由于 Softlayer 或 IBM Cloud 已从基于 Swift 的对象存储迁移到基于 S3 的云对象存储。我正在使用雾/aws 而不是雾/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

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

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

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

4

2 回答 2

1

https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints “这不是端点,而是 JSON 中的端点列表。

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

于 2019-12-17T17:28:21.563 回答
0

以下代码适用于 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(桶:)

上传一个文件

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

下载文件

@client.get_object(桶:,键:)

删除文件

@client.delete_object(桶:,键:)

删除存储桶

@client.delete_bucket(桶:)

于 2019-12-19T04:06:05.070 回答