使用 AWSSDK.S3 用于将文件上传到具有 .net core 的 IBM COS(兼容 S3)



我有一些使用 AWSSDK 的代码。S3将数据上传到S3,没什么神秘感。

由于IBM声称它的云对象存储与S3兼容,因此可以使用AWSSDK。S3 只需在 appsettings.json 上更改 ServiceURL 即可将文件上传到 IBM COS?

以前有人这样做过吗?

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

像这样:

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);

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

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

多亏了之前的答案,我做了一些研究和改进,这些步骤是为了使其即使在Microsoft的依赖注入中也能正常工作。

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

请记住,可以从 IBMCLoud 端点文档中检索 ServiceUrl,这取决于您决定查找资源的区域。 就我而言,因为我使用欧盟德国,我的服务网址是:s3.eu-de.cloud-object-storage.appdomain.cloud

  1. 在启动中.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

最新更新