Browse Source

Blogging: Replace System.Drawing with ImageSharp package

pull/10494/head
Engincan VESKE 5 years ago
parent
commit
491f1a765f
  1. 5
      modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj
  2. 5
      modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj
  3. 18
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileUploadConsts.cs
  4. 26
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs

5
modules/blogging/src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.csproj

@ -11,7 +11,10 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="4.7.0" /> <PackageReference Include="SixLabors.ImageSharp" Version="1.0.4" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Blogging.Admin.Application.Contracts\Volo.Blogging.Admin.Application.Contracts.csproj" /> <ProjectReference Include="..\Volo.Blogging.Admin.Application.Contracts\Volo.Blogging.Admin.Application.Contracts.csproj" />
<ProjectReference Include="..\Volo.Blogging.Domain\Volo.Blogging.Domain.csproj" /> <ProjectReference Include="..\Volo.Blogging.Domain\Volo.Blogging.Domain.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.AutoMapper\Volo.Abp.AutoMapper.csproj" /> <ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.AutoMapper\Volo.Abp.AutoMapper.csproj" />

5
modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj

@ -9,9 +9,12 @@
<PackageId>Volo.Blogging.Application</PackageId> <PackageId>Volo.Blogging.Application</PackageId>
<RootNamespace /> <RootNamespace />
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.4" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="$(MicrosoftPackageVersion)" />
<ProjectReference Include="..\Volo.Blogging.Application.Contracts\Volo.Blogging.Application.Contracts.csproj" /> <ProjectReference Include="..\Volo.Blogging.Application.Contracts\Volo.Blogging.Application.Contracts.csproj" />
<ProjectReference Include="..\Volo.Blogging.Domain\Volo.Blogging.Domain.csproj" /> <ProjectReference Include="..\Volo.Blogging.Domain\Volo.Blogging.Domain.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.AutoMapper\Volo.Abp.AutoMapper.csproj" /> <ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.AutoMapper\Volo.Abp.AutoMapper.csproj" />

18
modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileUploadConsts.cs

@ -1,20 +1,24 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.ObjectModel; using System.Collections.ObjectModel;
using System.Drawing.Imaging;
using System.Linq; using System.Linq;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Bmp;
using SixLabors.ImageSharp.Formats.Gif;
using SixLabors.ImageSharp.Formats.Jpeg;
using SixLabors.ImageSharp.Formats.Png;
namespace Volo.Blogging.Files namespace Volo.Blogging.Files
{ {
public class FileUploadConsts public class FileUploadConsts
{ {
public static readonly ICollection<ImageFormat> AllowedImageUploadFormats = new Collection<ImageFormat> public static readonly ICollection<IImageFormat> AllowedImageUploadFormats = new Collection<IImageFormat>
{ {
ImageFormat.Jpeg, JpegFormat.Instance,
ImageFormat.Png, PngFormat.Instance,
ImageFormat.Gif, GifFormat.Instance,
ImageFormat.Bmp BmpFormat.Instance,
}; };
public static string AllowedImageFormatsJoint => string.Join(",", AllowedImageUploadFormats.Select(x => x.ToString())); public static string AllowedImageFormatsJoint => string.Join(",", AllowedImageUploadFormats.Select(x => x.Name));
} }
} }

26
modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/ImageFormatHelper.cs

@ -1,27 +1,33 @@
using System.Collections.Generic; using System;
using System.Drawing.Imaging; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats;
namespace Volo.Blogging.Areas.Blog.Helpers namespace Volo.Blogging.Areas.Blog.Helpers
{ {
public class ImageFormatHelper public class ImageFormatHelper
{ {
public static ImageFormat GetImageRawFormat(Stream stream) public static IImageFormat GetImageRawFormat(Stream stream)
{ {
return System.Drawing.Image.FromStream(stream).RawFormat; using (var image = Image.Load(stream, out var imageFormat))
{
return imageFormat;
}
} }
public static bool IsValidImage(Stream stream, ICollection<ImageFormat> validFormats) public static bool IsValidImage(Stream stream, ICollection<IImageFormat> validFormats)
{ {
// System.Drawing only works on windows => https://docs.microsoft.com/en-us/dotnet/api/system.drawing.image?view=net-5.0#remarks try
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{ {
var imageFormat = GetImageRawFormat(stream); var imageFormat = GetImageRawFormat(stream);
return validFormats.Contains(imageFormat); return validFormats.Contains(imageFormat);
} }
catch (Exception e)
return true; {
return false;
}
} }
} }
} }

Loading…
Cancel
Save