diff --git a/ZR.Admin.WebApi/Controllers/CommonController.cs b/ZR.Admin.WebApi/Controllers/CommonController.cs index 04ded2d..880156c 100644 --- a/ZR.Admin.WebApi/Controllers/CommonController.cs +++ b/ZR.Admin.WebApi/Controllers/CommonController.cs @@ -1,6 +1,7 @@ using Infrastructure; using Infrastructure.Attribute; using Infrastructure.Enums; +using Infrastructure.Extensions; using Infrastructure.Model; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; @@ -94,7 +95,7 @@ namespace ZR.Admin.WebApi.Controllers [HttpPost()] [Verify] [ActionPermissionFilter(Permission = "common")] - public async Task UploadFile([FromForm(Name = "file")] IFormFile formFile, string fileName = "", string fileDir = "uploads", StoreType storeType = StoreType.LOCAL) + public async Task UploadFile([FromForm(Name = "file")] IFormFile formFile, string fileName = "", string fileDir = "", StoreType storeType = StoreType.LOCAL) { if (formFile == null) throw new CustomException(ResultCode.PARAM_ERROR, "上传文件不能为空"); SysFile file = new(); @@ -109,8 +110,12 @@ namespace ZR.Admin.WebApi.Controllers switch (storeType) { case StoreType.LOCAL: - file = await SysFileService.SaveFileToLocal(WebHostEnvironment.WebRootPath, fileName, fileDir, HttpContext.GetName(), formFile); - + string savePath = AppSettings.App(new string[] { "Upload", "localSavePath" }); + if (savePath.IsEmpty()) + { + savePath = Path.Combine(WebHostEnvironment.WebRootPath, "uploads"); + } + file = await SysFileService.SaveFileToLocal(savePath, fileName, fileDir, HttpContext.GetName(), formFile); break; case StoreType.ALIYUN: if ((fileSize / 1024) > MaxContentLength) diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json index d4c987b..3736ced 100644 --- a/ZR.Admin.WebApi/appsettings.json +++ b/ZR.Admin.WebApi/appsettings.json @@ -20,7 +20,8 @@ }, "DemoMode": false, //Ƿʾģʽ "Upload": { - "UploadUrl": "http://localhost:8888" + "UploadUrl": "http://localhost:8888", + "localSavePath": "" //ϴļ洢Ŀ¼/home/website/uploads }, //ƴ洢 "ALIYUN_OSS": { diff --git a/ZR.Service/System/SysFileService.cs b/ZR.Service/System/SysFileService.cs index 7421893..3a2abf8 100644 --- a/ZR.Service/System/SysFileService.cs +++ b/ZR.Service/System/SysFileService.cs @@ -34,12 +34,17 @@ namespace ZR.Service.System /// /// 存储本地 /// + /// 存储文件夹 + /// 存储根目录 + /// 自定文件名 + /// 上传的文件流 + /// /// public async Task SaveFileToLocal(string rootPath, string fileName, string fileDir, string userName, IFormFile formFile) { string fileExt = Path.GetExtension(formFile.FileName); fileName = (fileName.IsEmpty() ? HashFileName() : fileName) + fileExt; - fileDir = fileDir.IsEmpty() ? "uploads" : fileDir; + string filePath = GetdirPath(fileDir); string finalFilePath = Path.Combine(rootPath, filePath, fileName); double fileSize = Math.Round(formFile.Length / 1024.0, 2); @@ -51,7 +56,7 @@ namespace ZR.Service.System using (var stream = new FileStream(finalFilePath, FileMode.Create)) { - await formFile.CopyToAsync(stream);//await 不能少 + await formFile.CopyToAsync(stream); } string uploadUrl = SysConfigService.GetSysConfigByKey("sys.file.uploadUrl")?.ConfigValue ?? OptionsSetting.Upload.UploadUrl; string accessPath = string.Concat(uploadUrl, "/", filePath.Replace("\\", "/"), "/", fileName); @@ -59,7 +64,7 @@ namespace ZR.Service.System { StoreType = (int)Infrastructure.Enums.StoreType.LOCAL, FileType = formFile.ContentType, - FileUrl = finalFilePath, + FileUrl = finalFilePath.Replace("\\", "/"), AccessUrl = accessPath }; file.Id = await InsertFile(file);