using System.IO.Compression; namespace DocumentFile.Service { public interface IUploadService { Task HandleUploadWordFile(IFormFile iFormFile,string code); Task HandleUploadTemplateFile(IFormFile iFormFile, string code); Task HandleUploadImageFile(IFormFile iFormFile, string code); //(string fileType, byte[] archiveData, string archiveName) DownloadFiles(string subDirectory); } public class UploadService : IUploadService { private readonly string _webRootPath; public UploadService() { _webRootPath = AppDomain.CurrentDomain.BaseDirectory; } /// /// 上传文件 辅助函数 /// /// /// 文件夹客户标识 /// 文件夹分类标签 /// /// protected async virtual Task HandleUploadFile(IFormFile formFile,string tenant, string folder, params string[] format) { ReturnMsg msg = new ReturnMsg(); try { var extensionName = Path.GetExtension(formFile.FileName)?.ToLower().Trim(); //获取后缀名 if (format != null && format.Length > 0 && !format.ToList().Contains(extensionName.ToLower())) { msg.error = "请上传后缀名为:" + string.Join("、", format) + " 格式的文件"; } else { var path = $"/uploads/{tenant}/{folder}/{DateTime.Now:yyyyMMdd}"; var dir = this._webRootPath + path; if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } var filename = CreateName(path,extensionName); path += "/" + filename; // 创建新文件 using var fs = File.Create(this._webRootPath+ path); await formFile.CopyToAsync(fs); // 清空缓冲区数据 fs.Flush(); msg.code = 1; msg.url = path; } } catch (Exception er) { msg.code = -1; msg.error = "上传失败"; NLogProvider.GetInstance().Error(er); } return msg; } /// /// 生成唯一的文件名 /// /// /// /// private string CreateName(string path,string extensionName) { var filename = $"ZC_{DateTime.Now:HHmmssfff}" + extensionName; if (File.Exists(path + "/" + filename)) { return CreateName(path, extensionName); } else { return filename; } } /// /// 上传word文件 /// /// /// /// public async virtual Task HandleUploadWordFile(IFormFile iFormFile, string code) => await this.HandleUploadFile(iFormFile,code, "Instance", ".doc",".docx"); /// /// 上传word模板文件 /// /// /// /// public async virtual Task HandleUploadTemplateFile(IFormFile iFormFile, string code) => await this.HandleUploadFile(iFormFile, code, "Template", ".doc", ".docx"); /// /// 上传图片 /// /// /// /// public async virtual Task HandleUploadImageFile(IFormFile iFormFile, string code) => await this.HandleUploadFile(iFormFile, code, "Photo", ".jpg", ".jpeg", ".png"); /*, ".gif", ".jfif"*/ ///// ///// 下载证书文件 ///// 打包zip ///// ///// ///// //public (string fileType, byte[] archiveData, string archiveName) DownloadFiles(string path) //{ // using var memoryStream = new MemoryStream(); // using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) // { // files.ForEach(file => // { // var theFile = archive.CreateEntry(Path.GetFileName(file)); // using var binaryWriter = new BinaryWriter(theFile.Open()); // binaryWriter.Write(File.ReadAllBytes(file)); // }); // } // return ("application/zip", memoryStream.ToArray(), zipName); //} } }