Browse Source
Merge pull request #488 from colinin/fix-transfer-memory-stream
fix(oss): fixed overflow of memory stream length during large file transfer
pull/489/head
yx lin
4 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with
35 additions and
38 deletions
-
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs
-
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp.csproj
-
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/LINGYUN/Abp/OssManagement/FileSystem/ImageSharp/ImageSharpFileSystemOssObjectProcesser.cs
-
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.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; |
|
|
|
|
|
|
|
@ -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> |
|
|
|
|
|
|
|
@ -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_"); |
|
|
|
|
|
|
|
@ -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) |
|
|
|
{ |
|
|
|
|