Browse Source

fix(oss): fix OssManagement BlobStoring naming normalizer

pull/444/head
cKey 4 years ago
parent
commit
c936acd89b
  1. 6
      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. 42
      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

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

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

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

@ -1,6 +1,4 @@
using System; using System;
using System.Text;
using System.Web;
using Volo.Abp.BlobStoring; using Volo.Abp.BlobStoring;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -8,16 +6,28 @@ namespace LINGYUN.Abp.BlobStoring.OssManagement
{ {
public class OssManagementBlobNamingNormalizer : IBlobNamingNormalizer, ITransientDependency public class OssManagementBlobNamingNormalizer : IBlobNamingNormalizer, ITransientDependency
{ {
public string NormalizeBlobName(string blobName) public virtual string NormalizeBlobName(string blobName)
{ {
// 路径需要URL编码 return NormalizeName(blobName);
return HttpUtility.UrlEncode(blobName, Encoding.UTF8);
} }
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;
} }
} }
} }

42
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 await _ossObjectAppService.DeleteAsync(new GetOssObjectInput
{ {
Bucket = configuration.Bucket, Bucket = configuration.Bucket,
Object = args.BlobName Path = GetOssPath(args),
Object = GetOssName(args),
}); });
return true; return true;
} }
@ -42,7 +43,8 @@ namespace LINGYUN.Abp.BlobStoring.OssManagement
var oss = await _ossObjectAppService.GetAsync(new GetOssObjectInput var oss = await _ossObjectAppService.GetAsync(new GetOssObjectInput
{ {
Bucket = configuration.Bucket, Bucket = configuration.Bucket,
Object = args.BlobName Path = GetOssPath(args),
Object = GetOssName(args),
}); });
return oss != null; return oss != null;
} }
@ -63,7 +65,8 @@ namespace LINGYUN.Abp.BlobStoring.OssManagement
var content = await _ossObjectAppService.GetContentAsync(new GetOssObjectInput var content = await _ossObjectAppService.GetContentAsync(new GetOssObjectInput
{ {
Bucket = configuration.Bucket, Bucket = configuration.Bucket,
Object = args.BlobName Path = GetOssPath(args),
Object = GetOssName(args),
}); });
return content?.GetStream(); return content?.GetStream();
@ -83,10 +86,39 @@ namespace LINGYUN.Abp.BlobStoring.OssManagement
await _ossObjectAppService.CreateAsync(new CreateOssObjectInput await _ossObjectAppService.CreateAsync(new CreateOssObjectInput
{ {
Bucket = configuration.Bucket, Bucket = configuration.Bucket,
Overwrite = true, Overwrite = args.OverrideExisting,
FileName = args.BlobName, Path = GetOssPath(args),
FileName = GetOssName(args),
File = new RemoteStreamContent(args.BlobStream) 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] [HttpPost]
public virtual async Task<OssObjectDto> CreateAsync(CreateOssObjectInput input) public virtual async Task<OssObjectDto> CreateAsync([FromForm] CreateOssObjectInput input)
{ {
return await OssObjectAppService.CreateAsync(input); return await OssObjectAppService.CreateAsync(input);
} }

Loading…
Cancel
Save