复制代码
  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 }
复制代码