diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/BlobConsts.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/BlobConsts.cs new file mode 100644 index 0000000000..f0edc35777 --- /dev/null +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/BlobConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.BlobStoring.Database +{ + public static class BlobConsts + { + public const int MaxNameLength = 256; + + public const int MaxContentLength = 2_000_000_000; // 2 GB + } +} \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/ContainerConsts.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/ContainerConsts.cs index fa11c6464c..383883eca6 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/ContainerConsts.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain.Shared/Volo/Abp/BlobStoring/Database/ContainerConsts.cs @@ -2,6 +2,6 @@ { public static class ContainerConsts { - public const int MaxNameLength = 64; // TODO: find best length + public const int MaxNameLength = 128; } } \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Blob.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Blob.cs index 121352d6e8..56040fe6ce 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Blob.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Blob.cs @@ -1,5 +1,5 @@ -using System; -using Volo.Abp.Data; +using JetBrains.Annotations; +using System; using Volo.Abp.Domain.Entities; using Volo.Abp.MultiTenancy; @@ -13,14 +13,32 @@ namespace Volo.Abp.BlobStoring.Database public string Name { get; set; } - public byte[] Content { get; set; } + public byte[] Content { get; private set; } - public Blob(Guid id, Guid containerId, string name, byte[] content, Guid? tenantId) : base(id) + public Blob(Guid id, Guid containerId, [NotNull]string name, byte[] content, Guid? tenantId) : base(id) { + Check.NotNullOrWhiteSpace(name, nameof(name), BlobConsts.MaxNameLength); + CheckContent(content); + + Content = content; ContainerId = containerId; Name = name; - Content = content; TenantId = tenantId; } + + public virtual void SetContent(byte[] content) + { + CheckContent(content); + + Content = content; + } + + protected void CheckContent(byte[] content) + { + if (content.Length >= BlobConsts.MaxContentLength) + { + throw new AbpException("Blob content size cannot be more than 2GB."); + } + } } } \ No newline at end of file diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Container.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Container.cs index d96868840a..927e98ae25 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Container.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/Container.cs @@ -13,7 +13,8 @@ namespace Volo.Abp.BlobStoring.Database public Container(Guid id, [NotNull]string name, Guid? tenantId = null) : base(id) { - // Todo: check null and length etc + Check.NotNullOrWhiteSpace(name, nameof(name), ContainerConsts.MaxNameLength); + TenantId = tenantId; Name = name; } diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/DatabaseBlobProvider.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/DatabaseBlobProvider.cs index e99e8ed193..f749410429 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/DatabaseBlobProvider.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/DatabaseBlobProvider.cs @@ -31,7 +31,7 @@ namespace Volo.Abp.BlobStoring.Database throw new BlobAlreadyExistsException($"Saving BLOB '{args.BlobName}' does already exists in the container '{args.ContainerName}'! Set {nameof(args.OverrideExisting)} if it should be overwritten."); } - blob.Content = content; + blob.SetContent(content); await BlobRepository.UpdateAsync(blob); } else diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseDbContextModelCreatingExtensions.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseDbContextModelCreatingExtensions.cs index c14474ec02..9a3d52c4c9 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseDbContextModelCreatingExtensions.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDatabaseDbContextModelCreatingExtensions.cs @@ -36,8 +36,9 @@ namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore b.ConfigureByConvention(); - b.Property(p => p.Name).IsRequired().HasMaxLength(ContainerConsts.MaxNameLength); + b.Property(p => p.Name).IsRequired().HasMaxLength(BlobConsts.MaxNameLength); b.Property(p => p.ContainerId).IsRequired(); + b.Property(p => p.Content).HasMaxLength(BlobConsts.MaxContentLength); b.HasIndex(x => x.Name); });