|
@@ -7,6 +7,7 @@
|
|
|
// 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
|
|
// 软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于对适销性、适用性和非侵权的保证。
|
|
|
// 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
|
|
// 在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论是因合同、侵权或其他方式引起的,与软件或其使用或其他交易有关。
|
|
|
|
|
|
|
|
|
|
+using Aliyun.OSS.Util;
|
|
|
using Furion.VirtualFileServer;
|
|
using Furion.VirtualFileServer;
|
|
|
using OnceMi.AspNetCore.OSS;
|
|
using OnceMi.AspNetCore.OSS;
|
|
|
|
|
|
|
@@ -163,6 +164,16 @@ public class SysFileService : IDynamicApiController, ITransient
|
|
|
{
|
|
{
|
|
|
if (file == null) throw Oops.Oh(ErrorCodeEnum.D8000);
|
|
if (file == null) throw Oops.Oh(ErrorCodeEnum.D8000);
|
|
|
|
|
|
|
|
|
|
+ string? fileMd5 = null;
|
|
|
|
|
+ if (_uploadOptions.IsEnableMd5)
|
|
|
|
|
+ {
|
|
|
|
|
+ using var fileStream = file.OpenReadStream();
|
|
|
|
|
+ // 利用阿里云SDK库计算Md5(库来自OnceMi.AspNetCore.OSS引用的Aliyun.OSS.SDK)
|
|
|
|
|
+ fileMd5 = OssUtils.ComputeContentMd5(fileStream, fileStream.Length);
|
|
|
|
|
+
|
|
|
|
|
+ if (await _sysFileRep.IsAnyAsync(q => q.FileMd5 == fileMd5)) throw Oops.Oh(ErrorCodeEnum.D8004);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
var path = savePath;
|
|
var path = savePath;
|
|
|
if (string.IsNullOrWhiteSpace(savePath))
|
|
if (string.IsNullOrWhiteSpace(savePath))
|
|
|
{
|
|
{
|
|
@@ -206,6 +217,7 @@ public class SysFileService : IDynamicApiController, ITransient
|
|
|
Suffix = suffix,
|
|
Suffix = suffix,
|
|
|
SizeKb = sizeKb.ToString(),
|
|
SizeKb = sizeKb.ToString(),
|
|
|
FilePath = path,
|
|
FilePath = path,
|
|
|
|
|
+ FileMd5 = fileMd5,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
var finalName = newFile.Id + suffix; // 文件最终名称
|
|
var finalName = newFile.Id + suffix; // 文件最终名称
|