From 1bed8cd217643d3343db8e736b38896fe748244e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AD=A6=E7=A9=86=E9=80=B8=E4=BB=99?= Date: Sun, 6 Mar 2022 07:14:17 +0000 Subject: [PATCH 1/9] =?UTF-8?q?update=20document/admin-sqlserver.sql.=201?= =?UTF-8?q?=E3=80=81=E6=8F=92=E5=85=A5sys=5Fdept=E7=A4=BA=E4=BE=8B?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E9=94=99=E8=AF=AF=EF=BC=9A=20INSERT=20INTO?= =?UTF-8?q?=20sys=5Fdept(parentId,=20deptName,=20orderNum,=20status,=20del?= =?UTF-8?q?Flag,=20create=5Fby,=20create=5Ftime)=20VALUES=20(100,=20'?= =?UTF-8?q?=E7=A0=94=E5=8F=91=E9=83=A8=E9=97=A8',=20=20=201,=20=20'0,100',?= =?UTF-8?q?=20'0',=20'admin',=20GETDATE());=20=E3=80=90=20'0,100'=E5=AF=B9?= =?UTF-8?q?=E5=BA=94=E7=9A=84status=E5=AD=97=E6=AE=B5=EF=BC=8C=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E4=B8=BA0=E3=80=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2、创建表错误: CREATE TABLE sys_role_dept ( roleId bigint(20) NOT NULL, -- '角色ID', deptId bigint(20) NOT NULL , -- '部门ID', ) 修改为 CREATE TABLE sys_role_dept ( roleId bigint NOT NULL, -- '角色ID', deptId bigint NOT NULL , -- '部门ID', ) --- document/admin-sqlserver.sql | Bin 135086 -> 71196 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/document/admin-sqlserver.sql b/document/admin-sqlserver.sql index 9472aae08479ed994b867b38840fa522bf8a1662..2120d6f43517a067eb37c92b2355e89d73e625a9 100644 GIT binary patch literal 71196 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 Date: Mon, 7 Mar 2022 12:27:53 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E6=96=B0=E5=A2=9EsignalR=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=87=8D=E8=BF=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/utils/signalR.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ZR.Vue/src/utils/signalR.js b/ZR.Vue/src/utils/signalR.js index 13631e9..0a94210 100644 --- a/ZR.Vue/src/utils/signalR.js +++ b/ZR.Vue/src/utils/signalR.js @@ -13,16 +13,19 @@ export default { init(url) { const connection = new signalR.HubConnectionBuilder() .withUrl(url, { accessTokenFactory: () => getToken() }) + .withAutomaticReconnect()//自动重新连接 .build(); this.SR = connection; // 断线重连 connection.onclose(async () => { console.log('断开连接了') + console.assert(connection.state === signalR.HubConnectionState.Disconnected); + // 建议用户重新刷新浏览器 await this.start(); }) connection.onreconnected(() => { - console.log('断线重连') + console.log('断线重新连接成功') }) this.receiveMsg(connection); // 启动 From 075bdb8667f65922a5e58e8596569024df595352 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Wed, 9 Mar 2022 21:30:59 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E4=BC=98=E5=8C=96signalR=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/store/modules/socket.js | 2 +- ZR.Vue/src/utils/signalR.js | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/ZR.Vue/src/store/modules/socket.js b/ZR.Vue/src/store/modules/socket.js index a7c68f2..5d9935b 100644 --- a/ZR.Vue/src/store/modules/socket.js +++ b/ZR.Vue/src/store/modules/socket.js @@ -16,7 +16,7 @@ const actions = { changeOnlineNum({ commit }, data) { commit('SET_ONLINEUSER_NUM', data) }, - // 更新系统通知 + // 更新系统通知 getNoticeList({ commit }, data) { commit('SET_NOTICE_list', data) } diff --git a/ZR.Vue/src/utils/signalR.js b/ZR.Vue/src/utils/signalR.js index 13631e9..37f326e 100644 --- a/ZR.Vue/src/utils/signalR.js +++ b/ZR.Vue/src/utils/signalR.js @@ -13,6 +13,8 @@ export default { init(url) { const connection = new signalR.HubConnectionBuilder() .withUrl(url, { accessTokenFactory: () => getToken() }) + .withAutomaticReconnect()//自动重新连接 + .configureLogging(signalR.LogLevel.Information) .build(); this.SR = connection; // 断线重连 @@ -28,16 +30,19 @@ export default { // 启动 // this.start(); }, + /** + * 调用 this.signalR.start().then(async () => { await this.SR.invoke("method")}) + * @returns + */ async start() { var that = this; try { //使用async和await 或 promise的then 和catch 处理来自服务端的异常 - await this.SR.start(); - //console.assert(this.SR.state === signalR.HubConnectionState.Connected); console.log('signalR 连接成功了', this.SR.state); + return true; } catch (error) { that.failNum--; console.log(`失败重试剩余次数${that.failNum}`, error) @@ -46,6 +51,7 @@ export default { await this.SR.start() }, 5000); } + return false; } }, // 接收消息处理 From 321619763ecfb956c94971e923191dd5f787d724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 10 Mar 2022 15:02:59 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8B=96=E6=8B=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/components/FileUpload/index.vue | 155 ++++++++++++--------- 1 file changed, 88 insertions(+), 67 deletions(-) diff --git a/ZR.Vue/src/components/FileUpload/index.vue b/ZR.Vue/src/components/FileUpload/index.vue index 80129f2..f40483a 100644 --- a/ZR.Vue/src/components/FileUpload/index.vue +++ b/ZR.Vue/src/components/FileUpload/index.vue @@ -1,9 +1,12 @@ \ No newline at end of file From d2077762d180c466fdc9f62bc7bb6e1e0facc942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 10 Mar 2022 15:03:42 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=A4=8D=E5=88=B6=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Vue/src/views/tool/file/index.vue | 192 ++++++++++++++------------- 1 file changed, 97 insertions(+), 95 deletions(-) diff --git a/ZR.Vue/src/views/tool/file/index.vue b/ZR.Vue/src/views/tool/file/index.vue index e23fd17..3811e3a 100644 --- a/ZR.Vue/src/views/tool/file/index.vue +++ b/ZR.Vue/src/views/tool/file/index.vue @@ -6,7 +6,7 @@ - @@ -62,6 +62,10 @@ @@ -69,8 +73,8 @@ - - + + @@ -81,24 +85,24 @@ - + - 存储文件夹前缀 + 文件夹前缀 - + - + - - + @@ -139,7 +143,12 @@ {{formView.fileUrl}} - {{formView.accessUrl}} + {{formView.accessUrl}} + + 复制 + + @@ -147,14 +156,14 @@ From 6fd004cd35fea6fda2f592b07e625dc755bba718 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 10 Mar 2022 15:05:58 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E9=BB=98=E8=AE=A4=E6=8E=92=E5=BA=8F=E4=B8=BA?= =?UTF-8?q?=E5=80=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ZR.Admin.WebApi/Controllers/System/SysFileController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs index 2044973..a6435ea 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs @@ -46,7 +46,7 @@ namespace ZR.Admin.WebApi.Controllers predicate = predicate.AndIF(parm.FileId != null, m => m.Id == parm.FileId); //搜索条件查询语法参考Sqlsugar - var response = _SysFileService.GetPages(predicate.ToExpression(), parm); + var response = _SysFileService.GetPages(predicate.ToExpression(), parm, x => x.Id, OrderByType.Desc); return SUCCESS(response); } From 3555833ae726cdfdc122a49309445cbc372148df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 10 Mar 2022 21:33:14 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9sys=5Ffile=E8=A1=A8=20id?= =?UTF-8?q?=E4=B8=BAbigint=E7=B1=BB=E5=9E=8B=E7=A7=BB=E9=99=A4=E8=87=AA?= =?UTF-8?q?=E5=A2=9E=E6=94=B9=E7=94=A8=E9=9B=AA=E8=8A=B1id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- document/admin-mysql.sql | 4 ++-- document/admin-sqlserver.sql | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/document/admin-mysql.sql b/document/admin-mysql.sql index 1d0a39b..7913795 100644 --- a/document/admin-mysql.sql +++ b/document/admin-mysql.sql @@ -776,7 +776,7 @@ CREATE TABLE `gen_demo` ( -- ---------------------------- DROP TABLE IF EXISTS `sys_file`; CREATE TABLE `sys_file` ( - `id` BIGINT(11) NOT NULL AUTO_INCREMENT, + `id` BIGINT(11) NOT NULL, `realName` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件真实名', `fileName` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件名', `fileUrl` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '文件存储地址', @@ -789,5 +789,5 @@ CREATE TABLE `sys_file` ( `create_time` datetime(0) NULL DEFAULT NULL COMMENT '上传时间', `storeType` int(4) NULL DEFAULT NULL COMMENT '存储类型', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; diff --git a/document/admin-sqlserver.sql b/document/admin-sqlserver.sql index 2120d6f..a3b26b3 100644 --- a/document/admin-sqlserver.sql +++ b/document/admin-sqlserver.sql @@ -745,7 +745,7 @@ IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[sy GO CREATE TABLE [dbo].[sys_file]( - [id] [BIGINT] IDENTITY(1,1) NOT NULL PRIMARY KEY, + [id] [BIGINT] NOT NULL PRIMARY KEY, [realName] VARCHAR(50) NULL, [fileName] [VARCHAR](20) NULL, [fileUrl] [VARCHAR](500) NULL, From eb32117b8c9cd6302ea6343a2658dd9936f5c865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Thu, 10 Mar 2022 21:39:46 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=AD=98=E5=82=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/CommonController.cs | 30 +++++---- .../Controllers/System/SysFileController.cs | 65 +------------------ ZR.Common/AliyunOssHelper.cs | 2 +- ZR.Model/System/Dto/SysFileQueryDto.cs | 4 +- ZR.Model/System/SysFile.cs | 6 +- ZR.Service/System/IService/ISysFileService.cs | 2 +- ZR.Service/System/SysFileService.cs | 27 +++++--- ZR.Vue/src/components/FileUpload/index.vue | 2 +- ZR.Vue/src/views/tool/file/index.vue | 27 +++----- 9 files changed, 57 insertions(+), 108 deletions(-) diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index 678b629..7295ea0 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -7,9 +7,11 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using Newtonsoft.Json; +using Snowflake.Core; using System; using System.IO; using System.Linq; +using System.Threading.Tasks; using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Filters; using ZR.Common; @@ -158,25 +160,29 @@ namespace ZR.Admin.WebApi.Controllers [HttpPost] [Verify] [ActionPermissionFilter(Permission = "common")] - public IActionResult UploadFileAliyun([FromForm(Name = "file")] IFormFile formFile, string fileName = "", string fileDir = "") + public async Task UploadFileAliyun([FromForm(Name = "file")] IFormFile formFile, string fileName = "", string fileDir = "") { + if (fileDir.IsEmpty()) fileDir = "uploads"; if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空"); - string fileExt = Path.GetExtension(formFile.FileName); - string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png", ".jpeg", ".webp", ".svga", ".xls", ".doc", ".zip", ".json", ".txt", ".bundle" }; - int MaxContentLength = 1024 * 1024 * 15; - double fileSize = formFile.Length / 1024; - if (!AllowedFileExtensions.Contains(fileExt)) + string fileExt = Path.GetExtension(formFile.FileName);//文件后缀 + double fileSize = formFile.Length / 1024.0;//文件大小KB + string[] NotAllowedFileExtensions = new string[] { ".bat", ".exe", ".jar", ".js" }; + int MaxContentLength = 15; + if (NotAllowedFileExtensions.Contains(fileExt)) { return ToResponse(ResultCode.CUSTOM_ERROR, "上传失败,未经允许上传类型"); } - - if (formFile.Length > MaxContentLength) + if ((fileSize / 1024) > MaxContentLength) { - return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + (MaxContentLength / 1024).ToString() + " MB"); + return ToResponse(ResultCode.CUSTOM_ERROR, "上传文件过大,不能超过 " + MaxContentLength + " MB"); } - (bool, string, string) result = SysFileService.SaveFile(fileDir, formFile, fileName); - long fileId = SysFileService.InsertFile(new SysFile() + (bool, string, string) result = new(); + await Task.Run(() => + { + result = SysFileService.SaveFile(fileDir, formFile, fileName, ""); + }); + long id = SysFileService.InsertFile(new SysFile() { AccessUrl = result.Item2, Create_by = HttpContext.GetName(), @@ -193,7 +199,7 @@ namespace ZR.Admin.WebApi.Controllers { url = result.Item2, fileName = result.Item3, - fileId + fileId = id }); } #endregion diff --git a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs index a6435ea..8900235 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysFileController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysFileController.cs @@ -57,74 +57,13 @@ namespace ZR.Admin.WebApi.Controllers /// [HttpGet("{Id}")] [ActionPermissionFilter(Permission = "tool:file:query")] - public IActionResult GetSysFile(int Id) + public IActionResult GetSysFile(long Id) { var response = _SysFileService.GetFirst(x => x.Id == Id); return SUCCESS(response); } - ///// - ///// 添加文件存储 - ///// - ///// - //[HttpPost] - //[ActionPermissionFilter(Permission = "tool:file:add")] - //[Log(Title = "文件存储", BusinessType = BusinessType.INSERT)] - //public IActionResult AddSysFile([FromBody] SysFileDto parm) - //{ - // if (parm == null) - // { - // throw new CustomException("请求参数错误"); - // } - // //从 Dto 映射到 实体 - // var model = parm.Adapt().ToCreate(HttpContext); - - // var response = _SysFileService.Insert(model, it => new - // { - // it.FileName, - // it.FileUrl, - // it.StorePath, - // it.FileSize, - // it.FileExt, - // it.Create_by, - // it.Create_time, - // it.StoreType, - // it.AccessUrl, - // }); - // return ToResponse(response); - //} - - ///// - ///// 更新文件存储 - ///// - ///// - //[HttpPut] - //[ActionPermissionFilter(Permission = "tool:file:update")] - //[Log(Title = "文件存储", BusinessType = BusinessType.UPDATE)] - //public IActionResult UpdateSysFile([FromBody] SysFileDto parm) - //{ - // if (parm == null) - // { - // throw new CustomException("请求实体不能为空"); - // } - // //从 Dto 映射到 实体 - // var model = parm.Adapt().ToUpdate(HttpContext); - - // var response = _SysFileService.Update(w => w.Id == model.Id, it => new SysFile() - // { - // //Update 字段映射 - // FileUrl = model.FileUrl, - // StorePath = model.StorePath, - // FileSize = model.FileSize, - // FileExt = model.FileExt, - // StoreType = model.StoreType, - // AccessUrl = model.AccessUrl, - // }); - - // return ToResponse(response); - //} - /// /// 删除文件存储 /// @@ -134,7 +73,7 @@ namespace ZR.Admin.WebApi.Controllers [Log(Title = "文件存储", BusinessType = BusinessType.DELETE)] public IActionResult DeleteSysFile(string ids) { - int[] idsArr = Tools.SpitIntArrary(ids); + long[] idsArr = Tools.SpitLongArrary(ids); if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } var response = _SysFileService.Delete(idsArr); diff --git a/ZR.Common/AliyunOssHelper.cs b/ZR.Common/AliyunOssHelper.cs index 55108ef..4c9bf97 100644 --- a/ZR.Common/AliyunOssHelper.cs +++ b/ZR.Common/AliyunOssHelper.cs @@ -21,7 +21,7 @@ namespace ZR.Common /// 存储桶 如果为空默认取配置文件 public static System.Net.HttpStatusCode PutObjectFromFile(Stream filestreams, string dirPath, string bucketName = "") { - OssClient client = new OssClient(endpoint, accessKeyId, accessKeySecret); + OssClient client = new(endpoint, accessKeyId, accessKeySecret); if (string.IsNullOrEmpty(bucketName)) { bucketName = bucketName1; } try { diff --git a/ZR.Model/System/Dto/SysFileQueryDto.cs b/ZR.Model/System/Dto/SysFileQueryDto.cs index c86b135..fc860f8 100644 --- a/ZR.Model/System/Dto/SysFileQueryDto.cs +++ b/ZR.Model/System/Dto/SysFileQueryDto.cs @@ -9,7 +9,7 @@ namespace ZR.Model.System.Dto /// public class SysFileDto { - public int Id { get; set; } + public long Id { get; set; } public string FileName { get; set; } public string FileUrl { get; set; } public string StorePath { get; set; } @@ -25,6 +25,6 @@ namespace ZR.Model.System.Dto public DateTime? BeginCreate_time { get; set; } public DateTime? EndCreate_time { get; set; } public int? StoreType { get; set; } - public int? FileId { get; set; } + public long? FileId { get; set; } } } diff --git a/ZR.Model/System/SysFile.cs b/ZR.Model/System/SysFile.cs index 56f3e5c..f229cab 100644 --- a/ZR.Model/System/SysFile.cs +++ b/ZR.Model/System/SysFile.cs @@ -1,4 +1,5 @@ -using SqlSugar; +using Newtonsoft.Json; +using SqlSugar; using System; using System.Collections.Generic; using System.Text; @@ -13,7 +14,8 @@ namespace ZR.Model.System /// 描述 : 自增id /// 空值 : false /// - [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + [JsonConverter(typeof(ValueToStringConverter))] + [SugarColumn(IsPrimaryKey = true)] public long Id { get; set; } /// /// 文件真实名 diff --git a/ZR.Service/System/IService/ISysFileService.cs b/ZR.Service/System/IService/ISysFileService.cs index 6b8c319..62b4f6e 100644 --- a/ZR.Service/System/IService/ISysFileService.cs +++ b/ZR.Service/System/IService/ISysFileService.cs @@ -16,7 +16,7 @@ namespace ZR.Service.System.IService /// /// 结果、地址、文件名 (bool, string, string) SaveFile(string picdir, IFormFile formFile); - (bool, string, string) SaveFile(string picdir, IFormFile formFile, string customFileName); + (bool, string, string) SaveFile(string picdir, IFormFile formFile, string customFileName, string bucketName); /// /// 按时间来创建文件夹 /// diff --git a/ZR.Service/System/SysFileService.cs b/ZR.Service/System/SysFileService.cs index 1ff9b66..50b0222 100644 --- a/ZR.Service/System/SysFileService.cs +++ b/ZR.Service/System/SysFileService.cs @@ -11,6 +11,7 @@ using System.Net; using ZR.Model.System; using ZR.Repository.System; using Infrastructure.Extensions; +using SqlSugar.DistributedSystem.Snowflake; namespace ZR.Service.System { @@ -36,18 +37,28 @@ namespace ZR.Service.System /// public (bool, string, string) SaveFile(string picdir, IFormFile formFile) { - return SaveFile(picdir, formFile, ""); + return SaveFile(picdir, formFile, "", ""); } - public (bool, string, string) SaveFile(string picdir, IFormFile formFile, string customFileName) + + /// + /// 存储文件 + /// + /// 文件夹 + /// + /// 自定义文件名 + /// 存储桶 + /// + public (bool, string, string) SaveFile(string picdir, IFormFile formFile, string customFileName, string bucketName) { // eg: uploads/2020/08/18 - string dir = GetdirPath(picdir.ToString()); + //string dir = GetdirPath(picdir.ToString()); + string tempName = customFileName.IsEmpty() ? HashFileName() : customFileName; string fileExt = Path.GetExtension(formFile.FileName); - string fileName = $"{tempName}{fileExt}"; - string webUrl = $"{domainUrl}/{dir}/{fileName}"; + string fileName = tempName + fileExt; + string webUrl = string.Concat(domainUrl, "/", picdir, "/", fileName); - HttpStatusCode statusCode = AliyunOssHelper.PutObjectFromFile(formFile.OpenReadStream(), Path.Combine(dir, fileName)); + HttpStatusCode statusCode = AliyunOssHelper.PutObjectFromFile(formFile.OpenReadStream(), Path.Combine(picdir, fileName), bucketName); return (statusCode == HttpStatusCode.OK, webUrl, fileName); } @@ -81,13 +92,13 @@ namespace ZR.Service.System { try { - return InsertReturnBigIdentity(file); + return Insertable(file).ExecuteReturnSnowflakeId();//单条插入返回雪花ID; } catch (Exception ex) { Console.WriteLine("存储图片失败" + ex.Message); + throw new Exception(ex.Message); } - return 1; } } } diff --git a/ZR.Vue/src/components/FileUpload/index.vue b/ZR.Vue/src/components/FileUpload/index.vue index f40483a..6523b74 100644 --- a/ZR.Vue/src/components/FileUpload/index.vue +++ b/ZR.Vue/src/components/FileUpload/index.vue @@ -228,7 +228,7 @@ export default { margin-right: 10px; } ::v-deep .el-upload-dragger { - width: 220px; + width: 270px; height: 150px; } \ No newline at end of file diff --git a/ZR.Vue/src/views/tool/file/index.vue b/ZR.Vue/src/views/tool/file/index.vue index 3811e3a..0cc75e0 100644 --- a/ZR.Vue/src/views/tool/file/index.vue +++ b/ZR.Vue/src/views/tool/file/index.vue @@ -34,15 +34,13 @@ - + @@ -73,11 +71,11 @@ - - + + - + @@ -85,32 +83,25 @@ - - - 文件夹前缀 - - - - - + + - + - + -