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())
{
var memoryStream = new MemoryStream();
await aliyunOssObject.Content.CopyToAsync(memoryStream);
memoryStream.Seek(0, SeekOrigin.Begin);
ossObject.SetContent(memoryStream);
ossObject.SetContent(aliyunOssObject.Content);
}
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="..\..\..\common.props" />
@ -9,7 +9,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta11" />
<PackageReference Include="SixLabors.ImageSharp.Drawing" Version="1.0.0-beta14" />
</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)
{
var bytes = await context.OssObject.Content.GetAllBytesAsync();
var copyStream = context.OssObject.Content;
var bytes = await copyStream.GetAllBytesAsync();
if (IsImage(bytes))
{
var args = context.Process.Split(',');
if (DrawGraphics(bytes, args, out Stream content))
if (DrawGraphics(bytes, args, out var content))
{
context.SetContent(content);
// 释放原图形流数据
await copyStream.DisposeAsync();
}
}
}
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_");

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

Loading…
Cancel
Save