using log4net; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using NPOI.SS.Formula.Functions; using Ropin.Inspection.Api.Common; using Ropin.Inspection.Common.Accessor.Interface; using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; namespace Ropin.Inspection.Api.Controllers { public class FileController : BaseController { private static readonly ILog log = LogManager.GetLogger(typeof(FileController)); private readonly ILogger _logger; private readonly IClaimsAccessor _claims; /// /// 构造函数 /// /// /// public FileController(ILogger logger, IClaimsAccessor claims) { _logger = logger; _claims = claims; } /// /// 上传文件 /// /// /// [HttpPost("UploadFileAsync")] public async Task UploadFileAsync(IFormCollection Files) { log.Info($"[开始] 上传文件信息.【{DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss:fff")}】"); //_logger.LogInformation($"[开始] 上传文件信息.【{DateTime.Now}】"); try { //var form = Request.Form;//直接从表单里面获取文件名不需要参数 string dd = Files["File"]; var form = Files;//定义接收类型的参数 IList fileResultList = new List(); IFormFileCollection cols = Request.Form.Files; if (cols == null || cols.Count == 0) { return new ApiResult(ReturnCode.GeneralError, "没有上传文件"); } foreach (IFormFile file in cols) { //定义文件数组后缀格式 string[] LimitFileType = { ".XLS", ".XLSX" , ".DOC", ".DOCX" , ".RTF" , ".AVI", ".RM", ".MP4", ".RMVB", ".WMV", ".MTV", ".MOV", ".MPG", ".MPEG", ".JPG", ".JPEG", ".GIF", ".PNG", ".BMP", ".PDF", ".GLB" }; string[] LimitExcelFileType = { ".XLS", ".XLSX"}; string[] LimitWordFileType = {".DOC", ".DOCX", ".RTF" }; string[] LimitVideoFileType = { ".AVI", ".RM", ".MP4", ".RMVB", ".WMV", ".MTV", ".MOV", ".MPG", ".MPEG" }; string[] LimitPicFileType = { ".JPG", ".JPEG", ".GIF", ".PNG", ".BMP" }; string[] LimitPdfFileType = { ".PDF"}; string[] Limit3DFileType = { ".GLB" }; //LimitFileType.Union(LimitExcelFileType).ToArray().Union(LimitWordFileType).ToArray().Union(LimitVideoFileType).ToArray().Union(LimitPicFileType).ToArray(); //获取文件后缀是否存在数组中 string currentFileExtension = Path.GetExtension(file.FileName).ToUpper(); if (LimitFileType.Contains(currentFileExtension)) { //为了查看文件就不在重新生成文件名称了 var dateDirectory = DateTime.Now.ToString("yyyyMM"); var relativePath = Path.Combine("wwwroot/uploads/Files/", _claims.Linsence + "/" + dateDirectory); var directoryPath = Path.Combine(Directory.GetCurrentDirectory(), relativePath); var fileRelativePath = Path.Combine(relativePath + "/", file.FileName); if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } var path = Path.Combine(directoryPath + "/", file.FileName); using (var stream = new FileStream(path, FileMode.Create)) { await Task.Run(()=>{ //再把文件保存的文件夹中 file.CopyTo(stream); Hashtable hash = new Hashtable(); hash.Add("file", "/" + fileRelativePath); if (LimitExcelFileType.Contains(currentFileExtension)) { hash.Add("typeValue", "1"); } if (LimitWordFileType.Contains(currentFileExtension)) { hash.Add("typeValue", "2"); } if (LimitVideoFileType.Contains(currentFileExtension)) { hash.Add("typeValue", "4"); } if (LimitPicFileType.Contains(currentFileExtension)) { hash.Add("typeValue", "3"); } if (LimitPdfFileType.Contains(currentFileExtension)) { hash.Add("typeValue", "5"); } if (Limit3DFileType.Contains(currentFileExtension)) { hash.Add("typeValue", "6"); } hash.Add("name", file.Name); fileResultList.Add(hash); }); } } else { return new ApiResult(ReturnCode.GeneralError, "请上传指定格式的文件"); } } log.Info($"[结束] 上传文件信息.【{DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss:fff")}】"); return new ApiResult>(fileResultList); } catch (Exception ex) { log.Info($"[异常] 上传文件信息.【{DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss:fff")}】"); return new ApiResult(ReturnCode.GeneralError, ex.Message + ex.InnerException); } } } }