diff --git a/Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs b/Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs index 2d2adf11..9744c3a4 100644 --- a/Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs +++ b/Admin.NET/Admin.NET.Core/Enum/ErrorCodeEnum.cs @@ -553,6 +553,12 @@ public enum ErrorCodeEnum [ErrorCodeItemMetadata("文件已存在")] D8004, + /// + /// 无效的文件名 + /// + [ErrorCodeItemMetadata("无效的文件名")] + D8005, + /// /// 已存在同名或同编码配置参数 /// diff --git a/Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs b/Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs index f99e2515..fa712d89 100644 --- a/Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs +++ b/Admin.NET/Admin.NET.Core/Service/File/Dto/FileInput.cs @@ -16,14 +16,10 @@ public class PageFileInput : BasePageInput /// public string FileName { get; set; } - /// - /// 文件路径 - /// - public string FilePath { get; set; } - /// /// 文件后缀 /// + /// public string? Suffix { get; set; } /// @@ -59,11 +55,13 @@ public class UploadFileInput /// /// 文件类别 /// + /// public string FileType { get; set; } /// /// 文件别名 /// + /// public string FileAlias { get; set; } /// @@ -71,19 +69,10 @@ public class UploadFileInput /// public bool IsPublic { get; set; } = false; - /// - /// 文件路径 - /// - public string Path { get; set; } - - /// - /// 文件保存路径 - /// - public string SavePath { get; set; } - /// /// 允许格式:.jpeg.jpg.png.bmp.gif.tif /// + /// public string AllowSuffix { get; set; } } @@ -105,25 +94,23 @@ public class UploadFileFromBase64Input /// /// 文件类型( "image/jpeg",) /// + /// public string ContentType { get; set; } /// /// 文件类别 /// + /// public string FileType { get; set; } /// /// 文件别名 /// + /// public string FileAlias { get; set; } /// /// 是否公开 /// public bool IsPublic { get; set; } = false; - - /// - /// 保存路径 - /// - public string Path { get; set; } } \ No newline at end of file diff --git a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs index 82221aea..a95487f8 100644 --- a/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs +++ b/Admin.NET/Admin.NET.Core/Service/File/SysFileService.cs @@ -62,7 +62,6 @@ public class SysFileService : IDynamicApiController, ITransient // 合并公开和私有并分页 return await _sysFileRep.Context.UnionAll(publicList, privateList) .WhereIF(!string.IsNullOrWhiteSpace(input.FileName), u => u.FileName.Contains(input.FileName.Trim())) - .WhereIF(!string.IsNullOrWhiteSpace(input.FilePath), u => u.FilePath.Contains(input.FilePath.Trim())) .WhereIF(!string.IsNullOrWhiteSpace(input.StartTime.ToString()) && !string.IsNullOrWhiteSpace(input.EndTime.ToString()), u => u.CreateTime >= input.StartTime && u.CreateTime <= input.EndTime) .OrderBy(u => u.CreateTime, OrderByType.Desc) @@ -239,7 +238,9 @@ public class SysFileService : IDynamicApiController, ITransient [DisplayName("上传文件")] public async Task UploadFile([FromForm] UploadFileInput input) { - if (input.File == null) throw Oops.Oh(ErrorCodeEnum.D8000); + if (input.File == null || input.File.Length <= 0) throw Oops.Oh(ErrorCodeEnum.D8000); + + if (input.File.FileName.IndexOfAny(Path.GetInvalidFileNameChars()) >= 0) throw Oops.Oh(ErrorCodeEnum.D8005); // 判断是否重复上传的文件 var sizeKb = input.File.Length / 1024; // 大小KB @@ -281,8 +282,7 @@ public class SysFileService : IDynamicApiController, ITransient //if (!VerifyFileExtensionName.IsSameType(file.OpenReadStream(), suffix)) throw Oops.Oh(ErrorCodeEnum.D8001); // 文件存储位置 - var path = string.IsNullOrWhiteSpace(input.SavePath) ? _uploadOptions.Path : input.SavePath; - path = path.ParseToDateTimeForRep(); + var path = _uploadOptions.Path.ParseToDateTimeForRep(); var newFile = input.Adapt(); newFile.Id = YitIdHelper.NextId(); @@ -309,7 +309,7 @@ public class SysFileService : IDynamicApiController, ITransient [DisplayName("上传头像")] public async Task UploadAvatar([Required] IFormFile file) { - var sysFile = await UploadFile(new UploadFileInput { File = file, AllowSuffix = _imageType, SavePath = "upload/avatar" }); + var sysFile = await UploadFile(new UploadFileInput { File = file, AllowSuffix = _imageType }); var sysUserRep = _sysFileRep.ChangeRepository>(); var user = await sysUserRep.GetByIdAsync(_userManager.UserId); @@ -331,7 +331,7 @@ public class SysFileService : IDynamicApiController, ITransient [DisplayName("上传电子签名")] public async Task UploadSignature([Required] IFormFile file) { - var sysFile = await UploadFile(new UploadFileInput { File = file, AllowSuffix = _imageType, SavePath = "upload/signature" }); + var sysFile = await UploadFile(new UploadFileInput { File = file, AllowSuffix = _imageType }); var sysUserRep = _sysFileRep.ChangeRepository>(); var user = await sysUserRep.GetByIdAsync(_userManager.UserId); diff --git a/Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs b/Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs index 1aad5f52..3818a289 100644 --- a/Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Tenant/SysTenantService.cs @@ -721,7 +721,7 @@ public class SysTenantService : IDynamicApiController, ITransient Directory.CreateDirectory(absoluteDirPath); // 保存轮播图文件 - var sysFile = await _sysFileService.UploadFile(new UploadFileInput { File = file, FileType = "Carousel", SavePath = path }); + var sysFile = await _sysFileService.UploadFile(new UploadFileInput { File = file, FileType = "Carousel" }); //// 保存轮播图配置 //sysFile.BelongId = tenant.Id; diff --git a/Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs b/Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs index ce0678f7..4bda9876 100644 --- a/Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Wechat/SysWxOpenService.cs @@ -149,7 +149,7 @@ public class SysWxOpenService : IDynamicApiController, ITransient if (wxUser == null) throw Oops.Oh("未找到用户上传失败"); - var res = await _sysFileService.UploadFile(new UploadFileInput { File = input.File, FileType = input.FileType, Path = input.Path }); + var res = await _sysFileService.UploadFile(new UploadFileInput { File = input.File, FileType = input.FileType }); wxUser.Avatar = res.Url; await _sysOAuthUserRep.AsUpdateable(wxUser).IgnoreColumns(true).ExecuteCommandAsync(); diff --git a/Web/src/api-services/apis/sys-file-api.ts b/Web/src/api-services/apis/sys-file-api.ts index d2e029f3..08f588b1 100644 --- a/Web/src/api-services/apis/sys-file-api.ts +++ b/Web/src/api-services/apis/sys-file-api.ts @@ -573,13 +573,11 @@ export const SysFileApiAxiosParamCreator = function (configuration?: Configurati * @param {string} [fileType] * @param {string} [fileAlias] * @param {boolean} [isPublic] - * @param {string} [path] - * @param {string} [savePath] * @param {string} [allowSuffix] * @param {*} [options] Override http request option. * @throws {RequiredError} */ - apiSysFileUploadFilePostForm: async (file?: Blob, fileType?: string, fileAlias?: string, isPublic?: boolean, path?: string, savePath?: string, allowSuffix?: string, options: AxiosRequestConfig = {}): Promise => { + apiSysFileUploadFilePostForm: async (file?: Blob, fileType?: string, fileAlias?: string, isPublic?: boolean, allowSuffix?: string, options: AxiosRequestConfig = {}): Promise => { const localVarPath = `/api/sysFile/uploadFile`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, 'https://example.com'); @@ -618,14 +616,6 @@ export const SysFileApiAxiosParamCreator = function (configuration?: Configurati localVarFormParams.append('IsPublic', isPublic as any); } - if (path !== undefined) { - localVarFormParams.append('Path', path as any); - } - - if (savePath !== undefined) { - localVarFormParams.append('SavePath', savePath as any); - } - if (allowSuffix !== undefined) { localVarFormParams.append('AllowSuffix', allowSuffix as any); } @@ -923,14 +913,12 @@ export const SysFileApiFp = function(configuration?: Configuration) { * @param {string} [fileType] * @param {string} [fileAlias] * @param {boolean} [isPublic] - * @param {string} [path] - * @param {string} [savePath] * @param {string} [allowSuffix] * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, fileAlias?: string, isPublic?: boolean, path?: string, savePath?: string, allowSuffix?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { - const localVarAxiosArgs = await SysFileApiAxiosParamCreator(configuration).apiSysFileUploadFilePostForm(file, fileType, fileAlias, isPublic, path, savePath, allowSuffix, options); + async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, fileAlias?: string, isPublic?: boolean, allowSuffix?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise>> { + const localVarAxiosArgs = await SysFileApiAxiosParamCreator(configuration).apiSysFileUploadFilePostForm(file, fileType, fileAlias, isPublic, allowSuffix, options); return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => { const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url}; return axios.request(axiosRequestArgs); @@ -1090,14 +1078,12 @@ export const SysFileApiFactory = function (configuration?: Configuration, basePa * @param {string} [fileType] * @param {string} [fileAlias] * @param {boolean} [isPublic] - * @param {string} [path] - * @param {string} [savePath] * @param {string} [allowSuffix] * @param {*} [options] Override http request option. * @throws {RequiredError} */ - async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, fileAlias?: string, isPublic?: boolean, path?: string, savePath?: string, allowSuffix?: string, options?: AxiosRequestConfig): Promise> { - return SysFileApiFp(configuration).apiSysFileUploadFilePostForm(file, fileType, fileAlias, isPublic, path, savePath, allowSuffix, options).then((request) => request(axios, basePath)); + async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, fileAlias?: string, isPublic?: boolean, allowSuffix?: string, options?: AxiosRequestConfig): Promise> { + return SysFileApiFp(configuration).apiSysFileUploadFilePostForm(file, fileType, fileAlias, isPublic, allowSuffix, options).then((request) => request(axios, basePath)); }, /** * @@ -1257,15 +1243,13 @@ export class SysFileApi extends BaseAPI { * @param {string} [fileType] * @param {string} [fileAlias] * @param {boolean} [isPublic] - * @param {string} [path] - * @param {string} [savePath] * @param {string} [allowSuffix] * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof SysFileApi */ - public async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, fileAlias?: string, isPublic?: boolean, path?: string, savePath?: string, allowSuffix?: string, options?: AxiosRequestConfig) : Promise> { - return SysFileApiFp(this.configuration).apiSysFileUploadFilePostForm(file, fileType, fileAlias, isPublic, path, savePath, allowSuffix, options).then((request) => request(this.axios, this.basePath)); + public async apiSysFileUploadFilePostForm(file?: Blob, fileType?: string, fileAlias?: string, isPublic?: boolean, allowSuffix?: string, options?: AxiosRequestConfig) : Promise> { + return SysFileApiFp(this.configuration).apiSysFileUploadFilePostForm(file, fileType, fileAlias, isPublic, allowSuffix, options).then((request) => request(this.axios, this.basePath)); } /** * diff --git a/Web/src/api-services/models/page-file-input.ts b/Web/src/api-services/models/page-file-input.ts index 2753eec6..1a5213b6 100644 --- a/Web/src/api-services/models/page-file-input.ts +++ b/Web/src/api-services/models/page-file-input.ts @@ -90,14 +90,6 @@ export interface PageFileInput { */ fileName?: string | null; - /** - * 文件路径 - * - * @type {string} - * @memberof PageFileInput - */ - filePath?: string | null; - /** * 文件后缀 * diff --git a/Web/src/api-services/models/sys-file-upload-file-body.ts b/Web/src/api-services/models/sys-file-upload-file-body.ts index 66b0c22f..8996b70f 100644 --- a/Web/src/api-services/models/sys-file-upload-file-body.ts +++ b/Web/src/api-services/models/sys-file-upload-file-body.ts @@ -52,22 +52,6 @@ export interface SysFileUploadFileBody { */ isPublic?: boolean; - /** - * 文件路径 - * - * @type {string} - * @memberof SysFileUploadFileBody - */ - path?: string; - - /** - * 文件保存路径 - * - * @type {string} - * @memberof SysFileUploadFileBody - */ - savePath?: string; - /** * 允许格式:.jpeg.jpg.png.bmp.gif.tif * diff --git a/Web/src/api-services/models/upload-file-from-base64-input.ts b/Web/src/api-services/models/upload-file-from-base64-input.ts index ffb1f5c5..c990762d 100644 --- a/Web/src/api-services/models/upload-file-from-base64-input.ts +++ b/Web/src/api-services/models/upload-file-from-base64-input.ts @@ -67,12 +67,4 @@ export interface UploadFileFromBase64Input { * @memberof UploadFileFromBase64Input */ isPublic?: boolean; - - /** - * 保存路径 - * - * @type {string} - * @memberof UploadFileFromBase64Input - */ - path?: string | null; }