Browse Source

use IRemoteStreamContent for media uploading

pull/8399/head
Ahmet 6 years ago
parent
commit
328e8b19db
  1. 16
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/CreateMediaInputWithStream.cs
  2. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/MediaDescriptors/IMediaDescriptorAdminAppService.cs
  3. 10
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs
  4. 10
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs
  5. 27
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs
  6. 13
      modules/cms-kit/test/Volo.CmsKit.Application.Tests/MediaDescriptors/MediaDescriptorAdminAppService_Tests.cs

16
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; }
}
}

2
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 public interface IMediaDescriptorAdminAppService : IApplicationService
{ {
Task<MediaDescriptorDto> CreateAsync(CreateMediaInputStream inputStream); Task<MediaDescriptorDto> CreateAsync(string entityType, CreateMediaInputWithStream inputStream);
Task DeleteAsync(Guid id); Task DeleteAsync(Guid id);
} }

10
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs

@ -1,11 +1,9 @@
using System; using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.BlobStoring; using Volo.Abp.BlobStoring;
using Volo.Abp.GlobalFeatures; using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Permissions;
namespace Volo.CmsKit.Admin.MediaDescriptors namespace Volo.CmsKit.Admin.MediaDescriptors
{ {
@ -29,16 +27,16 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
MediaDescriptorDefinitionStore = mediaDescriptorDefinitionStore; MediaDescriptorDefinitionStore = mediaDescriptorDefinitionStore;
} }
public virtual async Task<MediaDescriptorDto> CreateAsync(CreateMediaInputStream inputStream) public virtual async Task<MediaDescriptorDto> 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? */ /* TODO: Shouldn't CreatePolicies be a dictionary and we check for inputStream.EntityType? */
await CheckAnyOfPoliciesAsync(definition.CreatePolicies); 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 MediaContainer.SaveAsync(newEntity.Id.ToString(), stream);
await MediaDescriptorRepository.InsertAsync(newEntity); await MediaDescriptorRepository.InsertAsync(newEntity);

10
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/CmsKitAdminHttpApiModule.cs

@ -1,5 +1,7 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.CmsKit.Admin.MediaDescriptors;
namespace Volo.CmsKit.Admin namespace Volo.CmsKit.Admin
{ {
@ -16,5 +18,13 @@ namespace Volo.CmsKit.Admin
mvcBuilder.AddApplicationPartIfNotExists(typeof(CmsKitAdminHttpApiModule).Assembly); mvcBuilder.AddApplicationPartIfNotExists(typeof(CmsKitAdminHttpApiModule).Assembly);
}); });
} }
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpAspNetCoreMvcOptions>(options =>
{
options.ConventionalControllers.FormBodyBindingIgnoredTypes.Add(typeof(CreateMediaInputWithStream));
});
}
} }
} }

27
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs

@ -25,10 +25,10 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
} }
[HttpPost] [HttpPost]
[NonAction] [Route("{entityType}")]
public virtual Task<MediaDescriptorDto> CreateAsync(CreateMediaInputStream inputStream) public virtual Task<MediaDescriptorDto> CreateAsync(string entityType, CreateMediaInputWithStream inputStream)
{ {
return MediaDescriptorAdminAppService.CreateAsync(inputStream); return MediaDescriptorAdminAppService.CreateAsync(entityType, inputStream);
} }
[HttpDelete] [HttpDelete]
@ -37,26 +37,5 @@ namespace Volo.CmsKit.Admin.MediaDescriptors
{ {
return MediaDescriptorAdminAppService.DeleteAsync(id); return MediaDescriptorAdminAppService.DeleteAsync(id);
} }
[HttpPost]
[Route("{entityType}")]
public virtual async Task<IActionResult> 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);
}
} }
} }

13
modules/cms-kit/test/Volo.CmsKit.Application.Tests/MediaDescriptors/MediaDescriptorAdminAppService_Tests.cs

@ -3,6 +3,7 @@ using System.IO;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using Shouldly; using Shouldly;
using Volo.Abp.Content;
using Volo.CmsKit.Admin.MediaDescriptors; using Volo.CmsKit.Admin.MediaDescriptors;
using Xunit; using Xunit;
@ -31,14 +32,14 @@ namespace Volo.CmsKit.MediaDescriptors
using var stream = new MemoryStream(Encoding.UTF8.GetBytes(mediaContent)); 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, Name = mediaName,
EntityType = _cmsKitTestData.Media_1_EntityType File = new RemoteStreamContent(stream)
}; {
ContentType = mediaType
var media = await _mediaDescriptorAdminAppService.CreateAsync(inputStream); }
});
media.ShouldNotBeNull(); media.ShouldNotBeNull();
} }

Loading…
Cancel
Save