Browse Source

fix(oss): fixed overflow of memory stream length during large file transfer

pull/488/head
cKey 4 years ago
parent
commit
607f509e5f
  1. 5
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs
  2. 4
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj
  3. 10
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN/Abp/OssManagement/FileSystem/ImageSharp/ImageSharpFileSystemOssObjectProcesser.cs
  4. 8
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs

5
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs

@ -228,10 +228,7 @@ namespace LINGYUN.Abp.OssManagement.Aliyun
if (aliyunOssObject.IsSetResponseStream()) if (aliyunOssObject.IsSetResponseStream())
{ {
var memoryStream = new MemoryStream(); ossObject.SetContent(aliyunOssObject.Content);
await aliyunOssObject.Content.CopyToAsync(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
ossObject.SetContent(memoryStream);
} }
return ossObject; return ossObject;

4
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj

@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\configureawait.props" /> <Import Project="..\..\..\configureawait.props" />
<Import Project="..\..\..\common.props" /> <Import Project="..\..\..\common.props" />
@ -9,7 +9,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta11" /> <PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta14" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

10
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN/Abp/OssManagement/FileSystem/ImageSharp/ImageSharpFileSystemOssObjectProcesser.cs

@ -24,21 +24,25 @@ namespace LINGYUN.Abp.OssManagement.FileSystem.ImageSharp
public virtual async Task ProcessAsync(FileSystemOssObjectContext context) public virtual async Task ProcessAsync(FileSystemOssObjectContext context)
{ {
var bytes = await context.OssObject.Content.GetAllBytesAsync(); var copyStream = context.OssObject.Content;
var bytes = await copyStream.GetAllBytesAsync();
if (IsImage(bytes)) if (IsImage(bytes))
{ {
var args = context.Process.Split(','); var args = context.Process.Split(',');
if (DrawGraphics(bytes, args, out Stream content)) if (DrawGraphics(bytes, args, out var content))
{ {
context.SetContent(content); context.SetContent(content);
// 释放原图形流数据
await copyStream.DisposeAsync();
} }
} }
} }
protected virtual bool DrawGraphics(byte[] fileBytes, string[] args, out Stream content) protected virtual bool DrawGraphics(byte[] fileBytes, string[] args, out Stream content)
{ {
using var image = Image.Load(fileBytes, out IImageFormat format); using var image = Image.Load(fileBytes, out var format);
// 大小 // 大小
var width = GetInt32Prarm(args, "w_"); var width = GetInt32Prarm(args, "w_");

8
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs

@ -293,8 +293,7 @@ namespace LINGYUN.Abp.OssManagement.FileSystem
else else
{ {
var fileInfo = new FileInfo(filePath); var fileInfo = new FileInfo(filePath);
using (var fileStream = File.OpenRead(filePath)) var fileStream = File.OpenRead(filePath);
{
var ossObject = new OssObject( var ossObject = new OssObject(
fileInfo.Name, fileInfo.Name,
objectPath, objectPath,
@ -311,9 +310,7 @@ namespace LINGYUN.Abp.OssManagement.FileSystem
FullName = fileInfo.FullName.Replace(Environment.ContentRootPath, "") FullName = fileInfo.FullName.Replace(Environment.ContentRootPath, "")
}; };
var memoryStream = new MemoryStream(); ossObject.SetContent(fileStream);
await fileStream.CopyToAsync(memoryStream);
ossObject.SetContent(memoryStream);
if (!request.Process.IsNullOrWhiteSpace()) if (!request.Process.IsNullOrWhiteSpace())
{ {
@ -334,7 +331,6 @@ namespace LINGYUN.Abp.OssManagement.FileSystem
return ossObject; return ossObject;
} }
} }
}
public virtual Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request) public virtual Task<GetOssContainersResponse> GetListAsync(GetOssContainersRequest request)
{ {

Loading…
Cancel
Save