diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/CreateMediaInputWithStream.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/CreateMediaInputWithStream.cs new file mode 100644 index 0000000000..a8a13b2ed2 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/CreateMediaInputWithStream.cs @@ -0,0 +1,16 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Content; +using Volo.Abp.Validation; +using Volo.CmsKit.MediaDescriptors; + +namespace Volo.CmsKit.Admin.MediaDescriptors +{ + public class CreateMediaInputWithStream + { + [Required] + [DynamicStringLength(typeof(MediaDescriptorConsts), nameof(MediaDescriptorConsts.MaxNameLength))] + public string Name { get; set; } + + public IRemoteStreamContent File { get; set; } + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs index eb4819dd06..83cd14e90c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs @@ -6,7 +6,7 @@ namespace Volo.CmsKit.Admin.MediaDescriptors { public interface IMediaDescriptorAdminAppService : IApplicationService { - Task CreateAsync(CreateMediaInputStream inputStream); + Task CreateAsync(string entityType, CreateMediaInputWithStream inputStream); Task DeleteAsync(Guid id); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs index b359d55244..fa799cb65b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs @@ -1,11 +1,9 @@ using System; using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; using Volo.Abp.BlobStoring; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.MediaDescriptors; -using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.MediaDescriptors { @@ -29,16 +27,16 @@ namespace Volo.CmsKit.Admin.MediaDescriptors MediaDescriptorDefinitionStore = mediaDescriptorDefinitionStore; } - public virtual async Task CreateAsync(CreateMediaInputStream inputStream) + public virtual async Task CreateAsync(string entityType, CreateMediaInputWithStream inputStream) { - var definition = await MediaDescriptorDefinitionStore.GetAsync(inputStream.EntityType); + var definition = await MediaDescriptorDefinitionStore.GetAsync(entityType); /* TODO: Shouldn't CreatePolicies be a dictionary and we check for inputStream.EntityType? */ await CheckAnyOfPoliciesAsync(definition.CreatePolicies); - using (var stream = inputStream.GetStream()) + using (var stream = inputStream.File.GetStream()) { - var newEntity = await MediaDescriptorManager.CreateAsync(inputStream.EntityType, inputStream.Name, inputStream.ContentType, inputStream.ContentLength ?? 0); + var newEntity = await MediaDescriptorManager.CreateAsync(entityType, inputStream.Name, inputStream.File.ContentType, inputStream.File.ContentLength ?? 0); await MediaContainer.SaveAsync(newEntity.Id.ToString(), stream); await MediaDescriptorRepository.InsertAsync(newEntity); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs index 5d84242bcd..bb573d55e6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs @@ -1,5 +1,7 @@ using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Modularity; +using Volo.CmsKit.Admin.MediaDescriptors; namespace Volo.CmsKit.Admin { @@ -16,5 +18,13 @@ namespace Volo.CmsKit.Admin mvcBuilder.AddApplicationPartIfNotExists(typeof(CmsKitAdminHttpApiModule).Assembly); }); } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.ConventionalControllers.FormBodyBindingIgnoredTypes.Add(typeof(CreateMediaInputWithStream)); + }); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs index da84dc8a3d..07c1315eed 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs @@ -25,10 +25,10 @@ namespace Volo.CmsKit.Admin.MediaDescriptors } [HttpPost] - [NonAction] - public virtual Task CreateAsync(CreateMediaInputStream inputStream) + [Route("{entityType}")] + public virtual Task CreateAsync(string entityType, CreateMediaInputWithStream inputStream) { - return MediaDescriptorAdminAppService.CreateAsync(inputStream); + return MediaDescriptorAdminAppService.CreateAsync(entityType, inputStream); } [HttpDelete] @@ -37,26 +37,5 @@ namespace Volo.CmsKit.Admin.MediaDescriptors { return MediaDescriptorAdminAppService.DeleteAsync(id); } - - [HttpPost] - [Route("{entityType}")] - public virtual async Task UploadAsync(string entityType, IFormFile file) - { - if (file == null) - { - return BadRequest(); - } - - var inputStream = new CreateMediaInputStream(file.OpenReadStream()) - { - EntityType = entityType, - ContentType = file.ContentType, - Name = file.FileName - }; - - var mediaDescriptorDto = await MediaDescriptorAdminAppService.CreateAsync(inputStream); - - return StatusCode((int)HttpStatusCode.Created, mediaDescriptorDto); - } } } \ No newline at end of file diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/MediaDescriptors/MediaDescriptorAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/MediaDescriptors/MediaDescriptorAdminAppService_Tests.cs index 52169eddbe..38a8b472bd 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/MediaDescriptors/MediaDescriptorAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/MediaDescriptors/MediaDescriptorAdminAppService_Tests.cs @@ -3,6 +3,7 @@ using System.IO; using System.Text; using System.Threading.Tasks; using Shouldly; +using Volo.Abp.Content; using Volo.CmsKit.Admin.MediaDescriptors; using Xunit; @@ -31,14 +32,14 @@ namespace Volo.CmsKit.MediaDescriptors using var stream = new MemoryStream(Encoding.UTF8.GetBytes(mediaContent)); - var inputStream = new CreateMediaInputStream(stream) + var media = await _mediaDescriptorAdminAppService.CreateAsync(_cmsKitTestData.Media_1_EntityType, new CreateMediaInputWithStream { - ContentType = mediaType, Name = mediaName, - EntityType = _cmsKitTestData.Media_1_EntityType - }; - - var media = await _mediaDescriptorAdminAppService.CreateAsync(inputStream); + File = new RemoteStreamContent(stream) + { + ContentType = mediaType + } + }); media.ShouldNotBeNull(); }