diff --git a/aspnet-core/modules/cli/LINGYUN.Abp.Cli/LINGYUN.Abp.Cli.csproj b/aspnet-core/modules/cli/LINGYUN.Abp.Cli/LINGYUN.Abp.Cli.csproj
index fbba86d1c..232bf7fbb 100644
--- a/aspnet-core/modules/cli/LINGYUN.Abp.Cli/LINGYUN.Abp.Cli.csproj
+++ b/aspnet-core/modules/cli/LINGYUN.Abp.Cli/LINGYUN.Abp.Cli.csproj
@@ -5,11 +5,15 @@
Exe
net6.0
- 5.0.0
- true
- labp
- ./nupkg
-
+ 5.0.1
+ colin
+ Use LINGYUN.MicroService.Templates command line
+ true
+ labp
+ ./nupkg
+ MIT
+ https://github.com/colinin/abp-next-admin
+
diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobNamingNormalizer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobNamingNormalizer.cs
index 5a6ffbba9..7f10f5c99 100644
--- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobNamingNormalizer.cs
+++ b/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;
}
}
}
diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProvider.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProvider.cs
index 100fe5c5c..4b1961a16 100644
--- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProvider.cs
+++ b/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;
+ }
}
}
diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs
index 08942d48b..d2df531c8 100644
--- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs
+++ b/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 CreateAsync(CreateOssObjectInput input)
+ public virtual async Task CreateAsync([FromForm] CreateOssObjectInput input)
{
return await OssObjectAppService.CreateAsync(input);
}