使用 AWSSDK.S3 将文件上传到带有 .net-core 的 IBM COS(兼容 S3)
Using AWSSDK.S3 to upload files to IBM COS (S3 compatible) with .net-core
我有一些代码使用 AWSSDK.S3 将数据上传到 S3,没什么神秘的。
由于 IBM 声称它是 Cloud Object Storage to be S3 compatible,因此只需更改位于 appsettings.json?
的 ServiceURL,就可以使用 AWSSDK.S3 将文件上传到 IBM COS
以前有人这样做过吗?
我不确定 appsettings.json
但是是的,如果您将 ServiceURL
设置为用于创建客户端的配置,它应该可以透明地工作。显然,COS 不支持的任何 AWS 功能都无法使用,并且任何 COS 扩展(如 API key auth 或 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);
我能够在 Net Core 3.1.17 后端上使用 AWSSDK.S3。
我的目标是使用 IBM COS(云对象存储)服务:从中读取、写入和删除文件。
使用 AWSDK.S3 是因为目前没有来自 IBM 或其他人的 nuget 包可以帮助我们(开发人员),所以有 2 种方法:
- 通过 IBM COS 服务(应符合 S3)的 REST API 手动实现所有这些功能(读、写、删除)
- 尝试使用符合 S3 标准的 AWSSDK.S3 包
多亏了之前的回答,我做了一些研究和改进,这些是使它即使在 Microsoft 的依赖注入下也能工作的步骤。
- 在 IBM Cloud 平台中,创建服务凭证,包括 HMAC 凭证。这是一个重要的步骤,它允许您使用 AccessKeyId 和 SecretAccessKey 创建凭据,否则您将看不到它。
- 现在在 appsettings.json 添加一个 JSON 这样的
{
"CosLogs":{
"ServiceURL":"https://s3.eu-de.cloud-object-storage.appdomain.cloud",
"AccessKeyId":"youaccessKeyIdTakenFromCredentialServiceDetail",
"SecretAccessKey":"yourSecreatAccessKeyTakenFromCredentialServiceDetail"
}
}
请记住,可以从 IBMCLoud endpoint documentation 检索 ServiceUrl,这取决于您决定在何处查找资源的 region/regions。
就我而言,因为我使用的是欧盟德国,所以我的 serviceUrl 是:s3.eu-de.cloud-object-storage.appdomain.cloud
- 在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>();
- 使用 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);
}
已安装的相关包:
- NetCore 3.1.1x
- AWSSDK.S3 3.7.1.5
- AWSSDK.Extensions.NETCore.Setup 3.7.0.1
我有一些代码使用 AWSSDK.S3 将数据上传到 S3,没什么神秘的。
由于 IBM 声称它是 Cloud Object Storage to be S3 compatible,因此只需更改位于 appsettings.json?
的 ServiceURL,就可以使用 AWSSDK.S3 将文件上传到 IBM COS以前有人这样做过吗?
我不确定 appsettings.json
但是是的,如果您将 ServiceURL
设置为用于创建客户端的配置,它应该可以透明地工作。显然,COS 不支持的任何 AWS 功能都无法使用,并且任何 COS 扩展(如 API key auth 或 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);
我能够在 Net Core 3.1.17 后端上使用 AWSSDK.S3。 我的目标是使用 IBM COS(云对象存储)服务:从中读取、写入和删除文件。 使用 AWSDK.S3 是因为目前没有来自 IBM 或其他人的 nuget 包可以帮助我们(开发人员),所以有 2 种方法:
- 通过 IBM COS 服务(应符合 S3)的 REST API 手动实现所有这些功能(读、写、删除)
- 尝试使用符合 S3 标准的 AWSSDK.S3 包
多亏了之前的回答,我做了一些研究和改进,这些是使它即使在 Microsoft 的依赖注入下也能工作的步骤。
- 在 IBM Cloud 平台中,创建服务凭证,包括 HMAC 凭证。这是一个重要的步骤,它允许您使用 AccessKeyId 和 SecretAccessKey 创建凭据,否则您将看不到它。
- 现在在 appsettings.json 添加一个 JSON 这样的
{
"CosLogs":{
"ServiceURL":"https://s3.eu-de.cloud-object-storage.appdomain.cloud",
"AccessKeyId":"youaccessKeyIdTakenFromCredentialServiceDetail",
"SecretAccessKey":"yourSecreatAccessKeyTakenFromCredentialServiceDetail"
}
}
请记住,可以从 IBMCLoud endpoint documentation 检索 ServiceUrl,这取决于您决定在何处查找资源的 region/regions。 就我而言,因为我使用的是欧盟德国,所以我的 serviceUrl 是:s3.eu-de.cloud-object-storage.appdomain.cloud
- 在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>();
- 使用 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);
}
已安装的相关包:
- NetCore 3.1.1x
- AWSSDK.S3 3.7.1.5
- AWSSDK.Extensions.NETCore.Setup 3.7.0.1