1

我有一些代码使用AWSSDK.S3将数据上传到 S3,这并不神秘。

由于 IBM 声称它的Cloud Object StorageS3 兼容,因此只需更改 appsettings.json 中的 ServiceURL 就可以使用 AWSSDK.S3 将文件上传到 IBM COS?

以前有人这样做过吗?

4

2 回答 2

1

我不确定,appsettings.json但是是的,如果您将 设置为ServiceURL用于创建客户端的配置,它应该可以透明地工作。显然,任何 COS 不支持的 AWS 功能都无法使用,并且任何 COS 扩展(如 API 密钥身份验证或 Key Protect 等)都将不可用。

就像是:

AmazonS3Config S3Config = new AmazonS3Config {ServiceURL = "https://s3.us.cloud-object-storage.appdomain.cloud"};

string accessKeyId = "<accesskey>";
string secretAccessKey = "<secretkey>"; 

BasicAWSCredentials credentials = new BasicAWSCredentials(accessKeyId, secretAccessKey); 

AmazonS3Client client = new AmazonS3Client(credentials, S3Config);
于 2020-05-14T21:38:30.827 回答
1

我能够在 Net Core 3.1.17 后端使用 AWSSDK.S3。我的目标是使用 IBM COS(云对象存储)服务:从中读取、写入和删除文件。使用 AWSDK.S3 是因为现在没有来自 IBM 或其他人的 nuget 包可以帮助我们(开发人员),所以有两种方法:

  • 通过 IBM COS 服务的 REST API 手动实现所有这些功能(读取、写入、删除)(应该符合 S3)
  • 尝试使用符合 S3 的 AWSSDK.S3 包

感谢上一个答案,我做了一些研究和改进,这些步骤是为了使其即使在 Microsoft 的依赖注入下也能正常工作。

  1. 在 IBM Cloud 平台中,创建服务凭证,包括HMAC Credentials。这是一个重要的步骤,它允许您使用 AccessKeyId 和 SecretAccessKey 创建凭据,否则您不会看到。
  2. 现在在 appsettings.json 添加一个这样的 JSON
{
   "CosLogs":{
      "ServiceURL":"https://s3.eu-de.cloud-object-storage.appdomain.cloud",
      "AccessKeyId":"youaccessKeyIdTakenFromCredentialServiceDetail",
      "SecretAccessKey":"yourSecreatAccessKeyTakenFromCredentialServiceDetail"
   }
}

请记住,可以从IBMCLoud 端点文档中检索 ServiceUrl ,它取决于您决定定位资源的区域。就我而言,自从我使用欧盟德国以来,我的 serviceUrl 是:s3.eu-de.cloud-object-storage.appdomain.cloud

  1. 在 Startup.cs 添加以下内容
var awsOptions = configuration.GetAWSOptions("CosLogs");
var accessKeyId = configuration.GetValue<string>("CosLogs:AccessKeyId");
var secretAccessKey = configuration.GetValue<string>("CosLogs:SecretAccessKey");
awsOptions.Credentials = new BasicAWSCredentials(accessKeyId,secretAccessKey);
services.AddDefaultAWSOptions(awsOptions);
services.AddAWSService<IAmazonS3>();
  1. 使用 DI 在您的课程中使用它。例子:
/// <summary>
///     The S3 Client (COS is S3 compatible)
// </summary>
private readonly IAmazonS3 s3Client;

public CosService(IAmazonS3 s3Client, ILogger<CosService> logger)
        {            
            this.s3Client = s3Client;
            this.logger = logger;
        }

public async Task DoCosCallAsync(CancellationToken cancellationToken){
  var bucketList= await s3Client.ListBucketsAsync(cancellationToken);
}

安装的相关软件包:

  • 网核 3.1.1x
  • AWSSDK.S3 3.7.1.5
  • AWSSDK.Extensions.NETCore.Setup 3.7.0.1
于 2021-06-24T12:56:10.100 回答