123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- using ZhonTai.Common.Attributes;
- using ZhonTai.Common.Configs;
- using ZhonTai.Common.Domain.Dto;
- using Microsoft.AspNetCore.Http;
- using System;
- using System.IO;
- using System.Linq;
- using System.Threading;
- using System.Threading.Tasks;
- using FileInfo = ZhonTai.Common.Files.FileInfo;
- using Yitter.IdGenerator;
- namespace ZhonTai.Common.Helpers
- {
- /// <summary>
- /// 文件上传帮助类
- /// </summary>
- [SingleInstance]
- public class UploadHelper
- {
- /// <summary>
- /// 上传单文件
- /// </summary>
- /// <param name="file"></param>
- /// <param name="config"></param>
- /// <param name="args"></param>
- /// <param name="cancellationToken"></param>
- /// <returns></returns>
- public async Task<IResponseOutput<FileInfo>> UploadAsync(IFormFile file, FileUploadConfig config, object args, CancellationToken cancellationToken = default)
- {
- var res = new ResponseOutput<FileInfo>();
- if (file == null || file.Length < 1)
- {
- return res.NotOk("请上传文件!");
- }
- //格式限制
- if (!config.ContentType.Contains(file.ContentType))
- {
- return res.NotOk("文件格式错误");
- }
- //大小限制
- if (!(file.Length <= config.MaxSize))
- {
- return res.NotOk("文件过大");
- }
- var fileInfo = new FileInfo(file.FileName, file.Length)
- {
- UploadPath = config.UploadPath,
- RequestPath = config.RequestPath
- };
- var dateTimeFormat = config.DateTimeFormat.NotNull() ? DateTime.Now.ToString(config.DateTimeFormat) : "";
- var format = config.Format.NotNull() ? StringHelper.Format(config.Format, args) : "";
- fileInfo.RelativePath = Path.Combine(dateTimeFormat, format).ToPath();
- if (!Directory.Exists(fileInfo.FileDirectory))
- {
- Directory.CreateDirectory(fileInfo.FileDirectory);
- }
- fileInfo.SaveName = $"{YitIdHelper.NextId()}.{fileInfo.Extension}";
- await SaveAsync(file, fileInfo.FilePath, cancellationToken);
- return res.Ok(fileInfo);
- }
- /// <summary>
- /// 保存文件
- /// </summary>
- /// <param name="file"></param>
- /// <param name="filePath"></param>
- /// <param name="cancellationToken"></param>
- /// <returns></returns>
- public async Task SaveAsync(IFormFile file, string filePath, CancellationToken cancellationToken = default)
- {
- using (var stream = new FileStream(filePath, FileMode.Create))
- {
- await file.CopyToAsync(stream, cancellationToken);
- }
- }
- }
- }
|