Browse Source

fix(oss): fix OssManagement BlobStoring naming normalizer

pull/444/head
cKey 4 years ago
parent
commit
c936acd89b
  1. 14
      aspnet-core/modules/cli/LINGYUN.Abp.Cli/LINGYUN.Abp.Cli.csproj
  2. 24
      aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobNamingNormalizer.cs
  3. 44
      aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProvider.cs
  4. 2
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs

14
aspnet-core/modules/cli/LINGYUN.Abp.Cli/LINGYUN.Abp.Cli.csproj

@ -5,11 +5,15 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<Version>5.0.0</Version>
<PackAsTool>true</PackAsTool>
<ToolCommandName>labp</ToolCommandName>
<PackageOutputPath>./nupkg</PackageOutputPath>
<RootNamespace />
<Version>5.0.1</Version>
<Copyright>colin</Copyright>
<Description>Use LINGYUN.MicroService.Templates command line</Description>
<PackAsTool>true</PackAsTool>
<ToolCommandName>labp</ToolCommandName>
<PackageOutputPath>./nupkg</PackageOutputPath>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageProjectUrl>https://github.com/colinin/abp-next-admin</PackageProjectUrl>
<RootNamespace />
</PropertyGroup>
<ItemGroup>

24
aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobNamingNormalizer.cs

@ -1,6 +1,4 @@
using System;
using System.Text;
using System.Web;
using Volo.Abp.BlobStoring;
using Volo.Abp.DependencyInjection;
@ -8,16 +6,28 @@ namespace LINGYUN.Abp.BlobStoring.OssManagement
{
public class OssManagementBlobNamingNormalizer : IBlobNamingNormalizer, ITransientDependency
{
public string NormalizeBlobName(string blobName)
public virtual string NormalizeBlobName(string blobName)
{
// 路径需要URL编码
return HttpUtility.UrlEncode(blobName, Encoding.UTF8);
return NormalizeName(blobName);
}
public string NormalizeContainerName(string containerName)
public virtual string NormalizeContainerName(string containerName)
{
// 尾部添加反斜杠
return NormalizeName(containerName).EnsureEndsWith('/');
}
protected virtual string NormalizeName(string name)
{
// 取消路径修饰符
name = name.Replace("./", "").Replace("../", "");
// 取消反斜杠开头
return containerName.EnsureStartsWith('/');
if (name.StartsWith("/"))
{
name = name.Substring(1);
}
return name;
}
}
}

44
aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProvider.cs

@ -29,7 +29,8 @@ namespace LINGYUN.Abp.BlobStoring.OssManagement
await _ossObjectAppService.DeleteAsync(new GetOssObjectInput
{
Bucket = configuration.Bucket,
Object = args.BlobName
Path = GetOssPath(args),
Object = GetOssName(args),
});
return true;
}
@ -42,7 +43,8 @@ namespace LINGYUN.Abp.BlobStoring.OssManagement
var oss = await _ossObjectAppService.GetAsync(new GetOssObjectInput
{
Bucket = configuration.Bucket,
Object = args.BlobName
Path = GetOssPath(args),
Object = GetOssName(args),
});
return oss != null;
}
@ -63,12 +65,13 @@ namespace LINGYUN.Abp.BlobStoring.OssManagement
var content = await _ossObjectAppService.GetContentAsync(new GetOssObjectInput
{
Bucket = configuration.Bucket,
Object = args.BlobName
Path = GetOssPath(args),
Object = GetOssName(args),
});
return content?.GetStream();
}
catch(Exception ex)
catch (Exception ex)
{
Logger.LogWarning("An error occurred while getting the OSS object and an empty data stream will be returned");
Logger.LogWarning(ex.Message);
@ -83,10 +86,39 @@ namespace LINGYUN.Abp.BlobStoring.OssManagement
await _ossObjectAppService.CreateAsync(new CreateOssObjectInput
{
Bucket = configuration.Bucket,
Overwrite = true,
FileName = args.BlobName,
Overwrite = args.OverrideExisting,
Path = GetOssPath(args),
FileName = GetOssName(args),
File = new RemoteStreamContent(args.BlobStream)
});
}
protected virtual string GetOssPath(BlobProviderArgs args)
{
// ContainerName: blob
// path1/path2/path3/path3/path5/file.txt => blob/path1/path2/path3/path3/path5/
var path = args.ContainerName;
if (args.BlobName.Contains("/"))
{
var lastIndex = args.BlobName.LastIndexOf('/');
path += args.BlobName.Substring(0, lastIndex);
}
return path.EnsureEndsWith('/');
}
protected virtual string GetOssName(BlobProviderArgs args)
{
// path1/path2/path3/path3/path5/file.txt => file.txt
if (args.BlobName.Contains("/"))
{
var lastIndex = args.BlobName.LastIndexOf('/');
// TODO: 用户传递以 / 为结尾符的文件名,让系统抛出异常?
return args.BlobName.Substring(lastIndex + 1);
}
return args.BlobName;
}
}
}

2
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs

@ -26,7 +26,7 @@ namespace LINGYUN.Abp.OssManagement
}
[HttpPost]
public virtual async Task<OssObjectDto> CreateAsync(CreateOssObjectInput input)
public virtual async Task<OssObjectDto> CreateAsync([FromForm] CreateOssObjectInput input)
{
return await OssObjectAppService.CreateAsync(input);
}

Loading…
Cancel
Save