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
{
Task<MediaDescriptorDto> CreateAsync(CreateMediaInputStream inputStream);
Task<MediaDescriptorDto> CreateAsync(string entityType, CreateMediaInputWithStream inputStream);
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.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<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? */
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);

10
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<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]
[NonAction]
public virtual Task<MediaDescriptorDto> CreateAsync(CreateMediaInputStream inputStream)
[Route("{entityType}")]
public virtual Task<MediaDescriptorDto> 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<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.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();
}

Loading…
Cancel
Save