- ABP Framework version: v7.3.3
- UI Type: Blazor WASM
- Database System: EF Core SQL Server
- Tiered (for MVC) or Auth Server Separated (for Angular): yes
- Exception message and full stack trace:
- Steps to reproduce the issue:
I am trying to use AWS blog storage, but since it is S3 object storage, I think it shall be possible to use it on S3 storage in other cloud providers (in my case DigitalOcean).
So I am trying to follow this one: https://docs.abp.io/en/abp/latest/Blob-Storing-Aws
And I have the following properties when using S3cmd:
access_key = DOxxxxxxxxxxxxxx
secret_key = Qpxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
check_ssl_certificate = True
check_ssl_hostname = True
host_base = fra1.digitaloceanspaces.com
host_bucket = %(bucket)s.fra1.digitaloceanspaces.com
I guess that it is the host_base that needs to be replaced from s3.amazonaws.com to digitaloceanspaces.com , but how can I do that? I can't find any properties that set that hostname.
Kind regards, Carl
4 Answer(s)
-
0
hi
You can try to override
DefaultAmazonS3ClientFactory
class to set additional properties, I'm not sure if it supports this. https://github.com/aws/aws-sdk-nethttps://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.BlobStoring.Aws/Volo/Abp/BlobStoring/Aws/DefaultAmazonS3ClientFactory.cs#L30-L58
-
0
Thanks,
I think that will work out since it is possible to change host according to:
using System; using Amazon; using Amazon.S3; using Amazon.S3.Model; string accessKey = Environment.GetEnvironmentVariable("SPACES_KEY"); string secretKey = Environment.GetEnvironmentVariable("SPACES_SECRET"); AmazonS3Config config = new AmazonS3Config(); config.ServiceURL = "https://nyc3.digitaloceanspaces.com"; AmazonS3Client s3Client = new AmazonS3Client( accessKey, secretKey, config );
However, can you please show me how to override
DefaultAmazonS3ClientFactory
class? All I need is to override thepublic virtual async Task<AmazonS3Client> GetAmazonS3Client
method, with two lines that explicit set the config.ServiceURL value from the example above.Kind regards, Carl
-
0
hi
using System.Threading.Tasks; using Amazon.S3; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; using Volo.Abp.Security.Encryption; namespace Volo.Abp.BlobStoring.Aws; [Dependency(ReplaceServices = true)] [ExposeServices(typeof(IAmazonS3ClientFactory), typeof(DefaultAmazonS3ClientFactory))] public class MyAmazonS3ClientFactory : DefaultAmazonS3ClientFactory { public MyAmazonS3ClientFactory( IDistributedCache<AwsTemporaryCredentialsCacheItem> cache, IStringEncryptionService stringEncryptionService) : base(cache, stringEncryptionService) { } public override Task<AmazonS3Client> GetAmazonS3Client(AwsBlobProviderConfiguration configuration) { // TODO: Add your custom logic here return base.GetAmazonS3Client(configuration); } }
-
0
Thanks,
Working perfectly.
Kind regards, Carl