- ABP Framework version: v4.0
Hi,
I want to create buckets dynamically at runtime (and named blob containers also) depends on incoming data (for example I want to store data with daily bucket names. If a record is created on 29-12-2020, my bucket name should be bucket-29-12-2020). But Abp supports blob container configuration while configuring services at startup. How can I achieve this functionality ?
Thanks for your help.
6 Answer(s)
-
0
Hi,
You can customize the implementation of
IBlobNamingNormalizer
:[Dependency(ReplaceServices = true)] [ExposeServices(typeof(IBlobNamingNormalizer))] public class MyMinioBlobNamingNormalizer : MinioBlobNamingNormalizer { public override string NormalizeContainerName(string containerName) { containerName = base.NormalizeContainerName(containerName); return containerName.Replace("{date}", DateTime.Now.ToShortDateString()); } }
Your container:
[BlobContainerName("bucket-{date}")] public class DayRollingContainer { }
-
0
Thanks for your attention.
@liangshiwei, your approach should work but there is one missing point for my case. Date parameter may not be today. I need to set it explicitly at runtime.
-
0
Hi,
You can change it according to your needs, for example, read a date from the settings.
-
0
Hi,
I do not need to set it from a setting or a constant value. I want to set it according to a property of an entity. It is dynamic and changes on every user request to the application service. For example;
SaveBlob(1) -> Find record with id -> Read creation date -> 2020-01-05 -> Save blob to bucket "bucket-2020-01-05" SaveBlob(35) -> Find record with id -> Read creation date -> 2010-11-22 -> Save blob to bucket "bucket-2010-11-22"
-
0
Hi,
I've achieved this by overriding MinioBlobNameCalculator, MinioBlobProvider and BlobContainerFactory. It should not be that hard. I think abp should support this functionality with an easy way.
Also, I think GetContainerName function of MinioBlobProvider has a bug. Configuration does not allow empty or null bucket names but that function checks for that and never uses true condition of comparison.
// always false because empty or null values are not allowed, application throws exception while starting up return configuration.BucketName.IsNullOrWhiteSpace() ? args.ContainerName : configuration.BucketName;
-
0
You are right, We will fix it. thanks.