diff --git a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs index 9476742..8bd04f6 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs @@ -1,3 +1,4 @@ +using NLog; using SqlSugar; using ZR.Admin.WebApi.Filters; using ZR.ServiceCore.Model; @@ -23,6 +24,8 @@ namespace ZR.Admin.WebApi.Controllers { _sysFileService = sysFileService; } + + private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); /// /// 查询文件存储列表 @@ -129,5 +132,44 @@ namespace ZR.Admin.WebApi.Controllers return NoContent(); } } + + /// + /// 通过文件ID下载文件 + /// + /// + /// + [HttpGet("download/{fileId}")] + public IActionResult Download([FromRoute] long fileId) + { + var sysFile = _sysFileService.Queryable().Where(it => it.Id == fileId).First(); + if (sysFile == null) + { + throw new CustomException("服务器上不存在此文件"); + } + + Stream? stream; + switch ((StoreType)Enum.Parse(typeof(StoreType), sysFile.StoreType.ToString() ?? string.Empty)) + { + case StoreType.LOCAL: + Logger.Info("本地存储"); + stream = sysFile.IsEncrypted == "1" ? _sysFileService.DecryptSysFileStream(sysFile.FileUrl) + : new FileStream(sysFile.FileUrl, FileMode.Open); + break; + case StoreType.ALIYUN: + stream = AliyunOssHelper.DownloadFile(sysFile.FileUrl, "", sysFile.IsEncrypted == "1"); + break; + default: + throw new CustomException("不支持的存储类型"); + } + if (stream != null) + { + return new FileStreamResult(stream, "application/octet-stream") + { + FileDownloadName = sysFile.RealName + }; + } + + return NoContent(); + } } } \ No newline at end of file diff --git a/ZR.ServiceCore/Services/SysUserService.cs b/ZR.ServiceCore/Services/SysUserService.cs index 6ffe5bb..67a4d7a 100644 --- a/ZR.ServiceCore/Services/SysUserService.cs +++ b/ZR.ServiceCore/Services/SysUserService.cs @@ -76,7 +76,7 @@ namespace ZR.Service /// public SysUser SelectUserById(long userId) { - var user = Queryable().Filter(null, true).WithCache(60 * 5) + var user = Queryable().Filter(null, true) .Where(f => f.UserId == userId).First(); if (user != null && user.UserId > 0) {