1 /// <summary> 2 /// 批量上传文件 3 /// </summary> 4 /// <param name="fileList">上传文件二进制流</param> 5 /// <param name="fileType">分类文件夹名称</param> 6 /// <returns></returns> 7 public async Task<List<ReturnUploadFileInfo>> BatchUploadFileSave(List<IFormFile> fileList, string fileType) 8 { 9 10 DateTime currTime = DateTime.Now; 11 long jwtId=Utils.GetUserId(); 12 //获取全部用户信息 13 List<CommonDataUserDto> userList = CommonData.GetUserAllList(); 14 userList = userList.Where(x => x.IsDel == 0) 15 .Where(x => (x.Resign ?? 1) == 1) 16 .ToList(); 17 List<ReturnUploadFileInfo> pathList = new List<ReturnUploadFileInfo>(); 18 19 #region 拼接图片保存路径 20 var Year = currTime.Year; 21 var date = currTime.ToString("yyyyMMdd"); 22 // 保存到网站根目录下的 wwwroot 目录 23 var rootPath = "wwwroot"; //根目录 24 // 文件路径 根目录+分类名称+年+年月日 25 var typePath = string.Format("{0}\\{1}\\{2}\\{3}", rootPath, fileType, Year, date); 26 var savePath = Path.Combine(App.HostEnvironment.ContentRootPath, typePath); 27 28 // 目录不存在则创建 29 if (!Directory.Exists(savePath)) Directory.CreateDirectory(savePath); 30 // 总上传大小 31 long size = fileList.Sum(f => f.Length); 32 #endregion 33 34 35 #region 保存图片 36 foreach (var formFile in fileList) 37 { 38 if (formFile.Length > 0) 39 { 40 ReturnUploadFileInfo tempUpFileInfo = new ReturnUploadFileInfo(); 41 42 tempUpFileInfo.FileName = formFile.FileName.Trim(); 43 //后缀 44 tempUpFileInfo.Suffix = Path.GetExtension(tempUpFileInfo.FileName).ToLower(); 45 tempUpFileInfo.State = false; 46 //文件字节大小 47 tempUpFileInfo.FileByte = formFile.Length; 48 //获取文件B KB MB GB大小 49 tempUpFileInfo.Size =Utils.GetSize(tempUpFileInfo.FileByte); 50 51 // 避免文件名重复,采用 GUID 生成 52 tempUpFileInfo.NewsFileName = Guid.NewGuid().ToString("N") + tempUpFileInfo.Suffix; 53 string filePath = Path.Combine(savePath, tempUpFileInfo.NewsFileName); 54 55 try 56 { 57 // 保存到指定路径 58 using (var stream = File.Create(filePath)) 59 { 60 await formFile.CopyToAsync(stream); 61 } 62 63 tempUpFileInfo.State = true; 64 tempUpFileInfo.Path = string.Format("{0}\\{1}", typePath, tempUpFileInfo.NewsFileName).Substring(rootPath.Length).Replace("\\", "/"); 65 tempUpFileInfo.FileId = Utils.NewGuid(); 66 } 67 catch (Exception ex) 68 { 69 tempUpFileInfo.State = false; 70 tempUpFileInfo.Path = ""; 71 tempUpFileInfo.FileId = ""; 72 } 73 74 // 上传顺序于输出顺序一直,不论文件是否上传成功 75 pathList.Add(tempUpFileInfo); 76 } 77 } 78 #endregion 79 80 #region 将保存成功的图片信息保存到数据库 81 82 if (pathList != null && pathList.Count() > 0) 83 { 84 List<Pan_UploadFile> inList = new List<Pan_UploadFile>(); 85 86 pathList.ForEach(item => 87 { 88 // 保存成功的 89 if (item.State) 90 { 91 Pan_UploadFile tempRow = new Pan_UploadFile(); 92 tempRow.Id = item.FileId; 93 tempRow.FileName = item.NewsFileName.Trim(); 94 tempRow.OldFileName = item.FileName.Trim(); 95 tempRow.FileByte = item.FileByte; 96 tempRow.Size = item.Size; 97 tempRow.CreateBy = Utils.GetUserId(); 98 tempRow.IsDel = false; 99 tempRow.Suffix = item.Suffix.Trim(); 100 tempRow.Path = item.Path.Trim(); 101 tempRow.CreateOn = currTime; 102 tempRow.UpUserName = userList.Where(x => x.Id == jwtId).Select(x => x.RealName).FirstOrDefault(); 103 104 inList.Add(tempRow); 105 } 106 107 108 }); 109 110 //新增 111 if (inList.Count() > 0) 112 db.Insert(inList).ExecuteAffrows(); 113 } 114 115 #endregion 116 117 118 return pathList; 119 }
上面是方法 其中第49行Utils.GetSize(tempUpFileInfo.FileByte) 是调用的公共方法 功能是把字节大小转为B KB MB GB 具体实现请看另外一个博客 将字节转文件大小B KB MB GB - 石鹏超 - 博客园 (cnblogs.com)
底下是40行代码的dto
1 /// <summary> 2 /// 文件上传DTO 3 /// </summary> 4 public class ReturnUploadFileInfo 5 { 6 /// <summary> 7 /// 原文件名 8 /// </summary> 9 public string FileName { get; set; } 10 /// <summary> 11 /// 新文件名 12 /// </summary> 13 public string NewsFileName { get; set; } 14 /// <summary> 15 /// 状态 16 /// </summary> 17 public bool State { get; set; } 18 /// <summary> 19 /// 大小 20 /// </summary> 21 public string Size { get; set; } 22 /// <summary> 23 /// 路径 24 /// </summary> 25 public string Path { get; set; } 26 /// <summary> 27 /// 文件库Id 28 /// </summary> 29 public string FileId { get; set; } 30 /// <summary> 31 /// 后缀名 32 /// </summary> 33 public string Suffix { get; set; } 34 /// <summary> 35 /// 其他信息 36 /// </summary> 37 public string OtherJson { get; set; } 38 39 /// <summary> 40 /// 字节 41 /// </summary> 42 public Nullable<long> FileByte { get; set; } 43 }
下面是添加到数据库的class
1 /// <summary> 2 /// 文件表 3 /// </summary> 4 [Table(Name = "Pan_UploadFile")] 5 public class Pan_UploadFile: BaseEntity 6 { 7 /// <summary> 8 /// 文件GUID名称 9 /// </summary> 10 public string FileName { get; set; } 11 /// <summary> 12 /// 文件名称 13 /// </summary> 14 public string OldFileName { get; set; } 15 /// <summary> 16 /// 文件大小 17 /// </summary> 18 public string Size { get; set; } 19 /// <summary> 20 /// 创建时间 21 /// </summary> 22 public Nullable<DateTime> CreateOn { get; set; } 23 /// <summary> 24 /// 创建人Id 25 /// </summary> 26 public long CreateBy { get; set; } 27 /// <summary> 28 /// 是否删除 false正常使用,true已删除 29 /// </summary> 30 public bool IsDel { get; set; } 31 /// <summary> 32 /// 后缀 33 /// </summary> 34 public string Suffix { get; set; } 35 /// <summary> 36 /// 路径 37 /// </summary> 38 public string Path { get; set; } 39 40 /// <summary> 41 /// 上传人姓名 42 /// </summary> 43 public string UpUserName { get; set; } 44 45 /// <summary> 46 /// 字节 47 /// </summary> 48 public Nullable<long> FileByte { get; set; } 49 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构