diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 6771ae6adf..e6c5af3376 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -1,6 +1,8 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; namespace Volo.CmsKit.Public.Blogs { @@ -9,5 +11,7 @@ namespace Volo.CmsKit.Public.Blogs Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input); Task GetAsync(string blogUrlSlug, string blogPostUrlSlug); + + Task GetCoverImageAsync(Guid id); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index d9bb9ab281..a6eaa6e96d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Application.Dtos; +using Volo.Abp.BlobStoring; +using Volo.Abp.Content; using Volo.CmsKit.Blogs; namespace Volo.CmsKit.Public.Blogs @@ -10,6 +12,8 @@ namespace Volo.CmsKit.Public.Blogs { protected IBlogRepository BlogRepository { get; } + protected IBlobContainer BlobContainer { get; } + protected IBlogPostRepository BlogPostRepository { get; } public BlogPostPublicAppService( @@ -39,5 +43,12 @@ namespace Volo.CmsKit.Public.Blogs await BlogPostRepository.GetCountAsync(blog.Id), ObjectMapper.Map, List>(blogPosts)); } + + public async Task GetCoverImageAsync(Guid id) + { + var stream = await BlobContainer.GetAsync(id.ToString()); + + return new RemoteStreamContent(stream); + } } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs new file mode 100644 index 0000000000..c5dc7246ce --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -0,0 +1,49 @@ +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.CmsKit.Public.Blogs; + +namespace Volo.CmsKit.Public.HttpApi.Volo.CmsKit.Public.Blogs +{ + [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] + [Area("cms-kit")] + [Route("api/cms-kit-public/blog-posts")] + public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPublicAppService + { + protected IBlogPostPublicAppService BlogPostPublicAppService { get; } + + public BlogPostPublicController(IBlogPostPublicAppService blogPostPublicAppService) + { + BlogPostPublicAppService = blogPostPublicAppService; + } + + [HttpGet] + public Task GetAsync(string blogUrlSlug, string blogPostUrlSlug) + { + return BlogPostPublicAppService.GetAsync(blogUrlSlug, blogPostUrlSlug); + } + + [HttpGet] + [Route("{id}/cover-image")] + public Task GetCoverImageAsync(Guid id) + { + Response.Headers.Add("Content-Disposition", $"inline;filename=\"{id}\""); + Response.Headers.Add("Accept-Ranges", "bytes"); + Response.Headers.Add("Cache-Control", "max-age=120"); + Response.ContentType = "image"; + return BlogPostPublicAppService.GetCoverImageAsync(id); + } + + [HttpGet] + public Task> GetListAsync(string blogUrlSlug, PagedAndSortedResultRequestDto input) + { + return BlogPostPublicAppService.GetListAsync(blogUrlSlug, input); + } + } +}