diff --git a/Infrastructure/Enums/StoreType.cs b/Infrastructure/Enums/StoreType.cs index 4dea7eb..79d8e6d 100644 --- a/Infrastructure/Enums/StoreType.cs +++ b/Infrastructure/Enums/StoreType.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.ComponentModel; namespace Infrastructure.Enums { @@ -30,5 +25,10 @@ namespace Infrastructure.Enums [Description("腾讯云")] TENCENT = 3, + /// + /// 七牛 + /// + [Description("七牛云")] + QINIU = 4 } } diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index d36dff1..18e2433 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -1,5 +1,6 @@ using Infrastructure; using Infrastructure.Attribute; +using Infrastructure.Enums; using Infrastructure.Extensions; using Infrastructure.Model; using Microsoft.AspNetCore.Hosting; @@ -91,26 +92,60 @@ namespace ZR.Admin.WebApi.Controllers /// /// 存储目录 /// 自定义文件名 - /// 上传类型 1、发送邮件 + /// 上传类型1、保存到本地 2、保存到阿里云 /// [HttpPost()] [Verify] [ActionPermissionFilter(Permission = "common")] - public async Task UploadFile([FromForm(Name = "file")] IFormFile formFile, string fileName = "", string fileDir = "uploads", int uploadType = 0) + public async Task UploadFile([FromForm(Name = "file")] IFormFile formFile, string fileName = "", string fileDir = "uploads", StoreType storeType = StoreType.LOCAL) { if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空"); + SysFile file = new(); + string fileExt = Path.GetExtension(formFile.FileName);//文件后缀 + double fileSize = Math.Round(formFile.Length / 1024.0, 2);//文件大小KB + string[] NotAllowedFileExtensions = new string[] { ".bat", ".exe", ".jar", ".js" }; + int MaxContentLength = 15; + if (NotAllowedFileExtensions.Contains(fileExt)) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "上传失败,未经允许上传类型"); + } + switch (storeType) + { + case StoreType.LOCAL: + file = await SysFileService.SaveFileToLocal(WebHostEnvironment.WebRootPath, fileName, fileDir, HttpContext.GetName(), formFile); - SysFile file = await SysFileService.SaveFileToLocal(WebHostEnvironment.WebRootPath, fileName, fileDir, HttpContext.GetName(), formFile); + break; + case StoreType.ALIYUN: + if ((fileSize / 1024) > MaxContentLength) + { + return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + MaxContentLength + " MB"); + } + file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", fileDir, HttpContext.GetName()) + { + StoreType = (int)StoreType.ALIYUN, + FileType = formFile.ContentType + }; + file = await SysFileService.SaveFileToAliyun(file, formFile); + + if (file.Id <= 0) { return ToResponse(ApiResult.Error("阿里云连接失败")); } + break; + case StoreType.TENCENT: + break; + case StoreType.QINIU: + break; + default: + break; + } return SUCCESS(new { - url = uploadType == 1 ? file.FileUrl : file.AccessUrl, + url = file.AccessUrl, fileName, fileId = file.Id.ToString() }); } /// - /// 存储文件到阿里云 + /// 存储文件到阿里云(已弃用) /// /// /// 自定义文件名 @@ -134,7 +169,7 @@ namespace ZR.Admin.WebApi.Controllers { return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + MaxContentLength + " MB"); } - SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", fileDir, "", HttpContext.GetName()) + SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", fileDir, HttpContext.GetName()) { StoreType = (int)Infrastructure.Enums.StoreType.ALIYUN, FileType = formFile.ContentType diff --git a/ZR.Admin.WebApi/Dockerfile b/ZR.Admin.WebApi/Dockerfile index 91f4597..0f0f4be 100644 --- a/ZR.Admin.WebApi/Dockerfile +++ b/ZR.Admin.WebApi/Dockerfile @@ -4,7 +4,7 @@ WORKDIR /app #Ŀ¼,ڽڷ #VOLUME /app #dockerⱩ¶˿ -EXPOSE 5000 +EXPOSE 8888 VOLUME /app/logs #COPY bin/Release/net5.0/publish/ app/ COPY . app/ @@ -15,5 +15,7 @@ RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # ƷļĿ¼ #COPY . app/ +WORKDIR /app -ENTRYPOINT ["dotnet", "ZR.Admin.WebApi.dll"] \ No newline at end of file +#ȼ dotnet ZR.Admin.WebApi.dllָ˿Ĭdocker˿80˿ +ENTRYPOINT ["dotnet", "ZR.Admin.WebApi.dll", "--server.urls","http://*:8888"] \ No newline at end of file diff --git a/ZR.Admin.WebApi/Extensions/TasksExtension.cs b/ZR.Admin.WebApi/Extensions/TasksExtension.cs index 2ca150e..018a19c 100644 --- a/ZR.Admin.WebApi/Extensions/TasksExtension.cs +++ b/ZR.Admin.WebApi/Extensions/TasksExtension.cs @@ -33,11 +33,12 @@ namespace ZR.Admin.WebApi.Extensions /// public static IApplicationBuilder UseAddTaskSchedulers(this IApplicationBuilder app) { - var _tasksQzService = (ISysTasksQzService)App.GetRequiredService(typeof(ISysTasksQzService)); + //var _tasksQzService = (ISysTasksQzService)App.GetRequiredService(typeof(ISysTasksQzService)); ITaskSchedulerServer _schedulerServer = App.GetRequiredService(); - var tasks = _tasksQzService.GetList(m => m.IsStart); + //var tasks = _tasksQzService.GetList(m => m.IsStart); + var tasks = SqlSugar.IOC.DbScoped.SugarScope.Queryable().Where(m => m.IsStart).ToList(); //程序启动后注册所有定时任务 foreach (var task in tasks) diff --git a/ZR.Admin.WebApi/Framework/JwtUtil.cs b/ZR.Admin.WebApi/Framework/JwtUtil.cs index eb37c83..3a52795 100644 --- a/ZR.Admin.WebApi/Framework/JwtUtil.cs +++ b/ZR.Admin.WebApi/Framework/JwtUtil.cs @@ -131,9 +131,13 @@ namespace ZR.Admin.WebApi.Framework { var userData = jwtToken.FirstOrDefault(x => x.Type == ClaimTypes.UserData).Value; var loginUser = JsonConvert.DeserializeObject(userData); - var permissions = CacheHelper.GetCache(GlobalConstant.UserPermKEY + loginUser?.UserId); + var permissions = (List)CacheHelper.GetCache(GlobalConstant.UserPermKEY + loginUser?.UserId); + if (loginUser?.UserName == "admin") + { + permissions = new List() { GlobalConstant.AdminPerm }; + } if (permissions == null) return null; - loginUser.Permissions = (List)permissions; + loginUser.Permissions = permissions; return loginUser; } catch (Exception ex) @@ -150,8 +154,10 @@ namespace ZR.Admin.WebApi.Framework /// public static List AddClaims(LoginUser user) { - user.Permissions = new List(); - //1、创建Cookie保存用户信息,使用claim + if (user?.Permissions.Count > 50) + { + user.Permissions = new List(); + } var claims = new List() { new Claim(ClaimTypes.PrimarySid, user.UserId.ToString()), @@ -159,8 +165,6 @@ namespace ZR.Admin.WebApi.Framework new Claim(ClaimTypes.UserData, JsonConvert.SerializeObject(user)) }; - //写入Cookie - //WhiteCookie(context, claims); return claims; } diff --git a/ZR.Common/AliyunOssHelper.cs b/ZR.Common/AliyunOssHelper.cs index 4c9bf97..b45c87a 100644 --- a/ZR.Common/AliyunOssHelper.cs +++ b/ZR.Common/AliyunOssHelper.cs @@ -43,5 +43,25 @@ namespace ZR.Common return System.Net.HttpStatusCode.BadRequest; } + /// + /// 删除资源 + /// + /// + /// + /// + public static System.Net.HttpStatusCode DeleteFile(string dirPath, string bucketName = "") + { + if (string.IsNullOrEmpty(bucketName)) { bucketName = bucketName1; } + try + { + OssClient client = new(endpoint, accessKeyId, accessKeySecret); + DeleteObjectResult putObjectResult = client.DeleteObject(bucketName, dirPath); + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + return System.Net.HttpStatusCode.BadRequest; + } } } diff --git a/ZR.Model/System/SysFile.cs b/ZR.Model/System/SysFile.cs index 501b9c0..81c75be 100644 --- a/ZR.Model/System/SysFile.cs +++ b/ZR.Model/System/SysFile.cs @@ -72,14 +72,13 @@ namespace ZR.Model.System public string AccessUrl { get; set; } public SysFile() { } - public SysFile(string originFileName, string fileName, string ext, string fileSize, string storePath, string accessUrl,string create_by) + public SysFile(string originFileName, string fileName, string ext, string fileSize, string storePath, string create_by) { StorePath = storePath; RealName = originFileName; FileName = fileName; FileExt = ext; FileSize = fileSize; - AccessUrl = accessUrl; Create_by = create_by; Create_time = DateTime.Now; } diff --git a/ZR.Service/System/IService/ISysTasksLogService.cs b/ZR.Service/System/IService/ISysTasksLogService.cs index fe0815d..381796a 100644 --- a/ZR.Service/System/IService/ISysTasksLogService.cs +++ b/ZR.Service/System/IService/ISysTasksLogService.cs @@ -1,4 +1,5 @@ -using ZR.Model.System; +using System.Threading.Tasks; +using ZR.Model.System; using ZR.Repository; namespace ZR.Service.System.IService @@ -10,6 +11,6 @@ namespace ZR.Service.System.IService /// /// //public int AddTaskLog(string jobId); - SysTasksLog AddTaskLog(string jobId, SysTasksLog tasksLog); + Task AddTaskLog(string jobId, SysTasksLog tasksLog); } } diff --git a/ZR.Service/System/SysFileService.cs b/ZR.Service/System/SysFileService.cs index 415a21e..a774d7d 100644 --- a/ZR.Service/System/SysFileService.cs +++ b/ZR.Service/System/SysFileService.cs @@ -51,14 +51,15 @@ namespace ZR.Service.System using (var stream = new FileStream(finalFilePath, FileMode.Create)) { - await formFile.CopyToAsync(stream); + await formFile.CopyToAsync(stream);//await 不能少 } string accessPath = string.Concat(OptionsSetting.Upload.UploadUrl, "/", filePath.Replace("\\", "/"), "/", fileName); - SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", filePath, accessPath, userName) + SysFile file = new(formFile.FileName, fileName, fileExt, fileSize + "kb", filePath, userName) { StoreType = (int)Infrastructure.Enums.StoreType.LOCAL, FileType = formFile.ContentType, - FileUrl = finalFilePath + FileUrl = finalFilePath, + AccessUrl = accessPath }; file.Id = await InsertFile(file); return file; diff --git a/ZR.Service/System/SysTasksLogService.cs b/ZR.Service/System/SysTasksLogService.cs index 0aa6cd2..61c9ec6 100644 --- a/ZR.Service/System/SysTasksLogService.cs +++ b/ZR.Service/System/SysTasksLogService.cs @@ -1,6 +1,7 @@ using Infrastructure.Attribute; using System; using System.Linq.Expressions; +using System.Threading.Tasks; using ZR.Model; using ZR.Model.System; using ZR.Repository; @@ -12,7 +13,7 @@ namespace ZR.Service.System /// 任务日志 /// [AppService(ServiceLifetime = LifeTime.Transient, ServiceType = typeof(ISysTasksLogService))] - public class SysTasksLogService : BaseRepository, ISysTasksLogService + public class SysTasksLogService : BaseService, ISysTasksLogService { private ISysTasksQzService _tasksQzService; public SysTasksLogService(ISysTasksQzService tasksQzService) @@ -20,10 +21,10 @@ namespace ZR.Service.System _tasksQzService = tasksQzService; } - public SysTasksLog AddTaskLog(string jobId, SysTasksLog logModel) + public async Task AddTaskLog(string jobId, SysTasksLog logModel) { //获取任务信息 - var model = _tasksQzService.GetSingleAsync(f => f.ID == jobId).Result; + var model = await _tasksQzService.GetSingleAsync(f => f.ID == jobId); if (model != null) { @@ -33,7 +34,7 @@ namespace ZR.Service.System logModel.CreateTime = DateTime.Now; } - InsertAsync(logModel); + await InsertAsync(logModel); return logModel; } diff --git a/ZR.Tasks/TaskScheduler/JobBase.cs b/ZR.Tasks/TaskScheduler/JobBase.cs index 3de1997..5d27c75 100644 --- a/ZR.Tasks/TaskScheduler/JobBase.cs +++ b/ZR.Tasks/TaskScheduler/JobBase.cs @@ -56,7 +56,7 @@ namespace ZR.Tasks JobMessage = logMsg }; - RecordTaskLog(context, logModel); + await RecordTaskLog(context, logModel); return logModel; } @@ -65,7 +65,7 @@ namespace ZR.Tasks /// /// /// - protected void RecordTaskLog(IJobExecutionContext context, SysTasksLog logModel) + protected async Task RecordTaskLog(IJobExecutionContext context, SysTasksLog logModel) { var tasksLogService = (ISysTasksLogService)App.GetRequiredService(typeof(ISysTasksLogService)); var taskQzService = (ISysTasksQzService)App.GetRequiredService(typeof(ISysTasksQzService)); @@ -74,11 +74,11 @@ namespace ZR.Tasks IJobDetail job = context.JobDetail; logModel.InvokeTarget = job.JobType.FullName; - logModel = tasksLogService.AddTaskLog(job.Key.Name, logModel); + logModel = await tasksLogService.AddTaskLog(job.Key.Name, logModel); //成功后执行次数+1 if (logModel.Status == "0") { - taskQzService.UpdateAsync(f => new SysTasksQz() + await taskQzService.UpdateAsync(f => new SysTasksQz() { RunTimes = f.RunTimes + 1, LastRunTime = DateTime.Now diff --git a/ZR.Vue/src/components/FileUpload/index.vue b/ZR.Vue/src/components/FileUpload/index.vue index 14d85de..a8a9eaf 100644 --- a/ZR.Vue/src/components/FileUpload/index.vue +++ b/ZR.Vue/src/components/FileUpload/index.vue @@ -52,7 +52,7 @@ export default { // 文件类型, 例如['png', 'jpg', 'jpeg'] fileType: { type: Array, - default: () => ['doc', 'xls', 'ppt', 'txt', 'pdf', 'svga', 'json'] + default: () => ['doc', 'xls', 'ppt', 'txt', 'pdf', 'json'] }, // 是否显示提示 isShowTip: { diff --git a/ZR.Vue/src/components/UploadImage/index.vue b/ZR.Vue/src/components/UploadImage/index.vue index 8bf4f22..3317d27 100644 --- a/ZR.Vue/src/components/UploadImage/index.vue +++ b/ZR.Vue/src/components/UploadImage/index.vue @@ -1,7 +1,7 @@