| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- using System;
- using System.IO;
- using System.Threading.Tasks;
- using Abp.Auditing;
- using Abp.AutoMapper;
- using Abp.Configuration;
- using Abp.Dependency;
- using Abp.Domain.Repositories;
- using Abp.Localization;
- using Abp.Localization.Sources;
- using Abp.ObjectMapping;
- using Abp.UI;
- using WeApp.BaseInfo;
- using WeApp.Configuration;
- using IwbZero;
- using IwbZero.ToolCommon.LogHelpers;
- using WeApp.CommonManager.AppGuids;
- using IwbZero.ToolCommon.StringModel;
- namespace WeApp.CommonManager.AttachFiles
- {
- public class AttachFileManager : IAttachFileManager, ISingletonDependency
- {
- public AttachFileManager(ISettingManager settingManager, IRepository<SysAttachFile> repository, IAppGuidManager appGuidManager)
- {
- SettingManager = settingManager;
- Repository = repository;
- AppGuidManager = appGuidManager;
- ObjectMapper = SingletonDependency<AutoMapperObjectMapper>.Instance;
- // ObjectMapper = resolver.Resolve<AutoMapperObjectMapper>();
- }
- private IAppGuidManager AppGuidManager { get; }
- private ISettingManager SettingManager { get; }
- private IRepository<SysAttachFile> Repository { get; }
- private IObjectMapper ObjectMapper { get; }
- /// <summary>
- /// 上传附件
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- [DisableAuditing]
- public async Task FileUpload(AttachFileCreateDto input)
- {
- if (await IsValidFileType(input))
- {
- if (string.IsNullOrEmpty(input.AttachNo))
- {
- input.AttachNo = AppGuidManager.GetNextRecordId(DataLibType.Attach);
- }
- string filePath = string.IsNullOrEmpty(input.FilePath)
- ? $"{SettingManager.GetSettingValue(IwbSettingNames.DownloadPath)}/{input.TableName}/{input.ColumnName}"
- : input.FilePath;
- var lcRetVal = Base64ToFile(input.FileInfo, $"{input.FileName}-{DateTime.Now:yyMMddHHmmssfff}", input.FileExt, filePath);
- if (lcRetVal.StartsWith("error@"))
- {
- throw new UserFriendlyException(lcRetVal.Split(new[] { '@' }, StringSplitOptions.RemoveEmptyEntries)[1]);
- }
- input.FilePath = lcRetVal;
- var entity = await Repository.FirstOrDefaultAsync(a =>
- a.TableName == input.TableName && a.ColumnName == input.ColumnName &&
- a.SourceKey == input.SourceKey);
- if (entity == null)
- {
- entity = ObjectMapper.Map<SysAttachFile>(input);
- await Repository.InsertAsync(entity);
- }
- else
- {
- entity.FileExt = input.FileExt;
- entity.FileName = input.FileName;
- entity.FileTitle = input.FileTitle;
- entity.FilePath = lcRetVal;
- entity.FileType = input.FileType;
- await Repository.UpdateAsync(entity);
- }
- return;
- }
- var allowExts = string.IsNullOrEmpty(input.AllowExt)
- ? await SettingManager.GetSettingValueAsync(IwbSettingNames.UploadFileExt)
- : input.AllowExt;
- throw new UserFriendlyException(string.Format(L("FileUploadFileTypeInvalidFormatter"), $"{input.FileName}.{input.FileExt}", allowExts));
- }
- /// <summary>
- /// 上传附件
- /// </summary>
- /// <returns></returns>
- [DisableAuditing]
- public async Task FileUpload(string fileInfo, string filePath, string fileName, string fileExt)
- {
- if (await IsValidFileType(fileExt))
- {
- var lcRetVal = Base64ToFile(fileInfo, $"{fileName}", fileExt, filePath);
- if (lcRetVal.StartsWith("error@"))
- {
- throw new UserFriendlyException(lcRetVal.Split(new[] { '@' }, StringSplitOptions.RemoveEmptyEntries)[1]);
- }
- return;
- }
- var allowExts = await SettingManager.GetSettingValueAsync(IwbSettingNames.UploadFileExt);
- throw new UserFriendlyException(string.Format(L("FileUploadFileTypeInvalidFormatter"), $"{fileName}.{fileExt}", allowExts));
- }
- private async Task<bool> IsValidFileType(AttachFileCreateDto input)
- {
- return await IsValidFileType(input.FileExt, input.AllowExt, false, string.IsNullOrEmpty(input.AllowExt));
- }
- private async Task<bool> IsValidFileType(string fileName, string allowExts = null, bool isName = false,
- bool checkAll = false)
- {
- string ext = isName ? GetFileExt(fileName) : fileName;
- allowExts = checkAll
- ? $"{allowExts ?? ""},{await SettingManager.GetSettingValueAsync(IwbSettingNames.UploadFileExt)}"
- : allowExts;
- if (string.IsNullOrEmpty(allowExts))
- return true;
- string[] extList = allowExts.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
- foreach (var e in extList)
- {
- if (ext.ToLower() == e.ToLower())
- return true;
- }
- this.LogError("上传的文件非法:" + fileName);
- return false;
- }
- private string GetFileExt(string fileName)
- {
- string fileExt = fileName.Substring(fileName.LastIndexOf(".", StringComparison.Ordinal) + 1, fileName.Length - fileName.LastIndexOf(".", StringComparison.Ordinal) - 1);
- return fileExt.ToLower();
- }
- private string Base64ToFile(string base64Str, string fileName, string fileExt, string filePath)
- {
- string lcRetVal = "error@";
- try
- {
- fileName = $"{fileName}.{fileExt}";
- filePath = filePath.Sw("/");
- filePath = filePath.Ew("/");
- string path = $"{AppDomain.CurrentDomain.BaseDirectory}{filePath}";
- if (!Directory.Exists(path))
- Directory.CreateDirectory(path);
- byte[] bytes = Convert.FromBase64String(base64Str);
- using (FileStream fs = new FileStream($"{path}{fileName}", FileMode.Create, FileAccess.Write))
- {
- fs.Write(bytes, 0, bytes.Length);
- fs.Close();
- }
- lcRetVal = filePath + fileName;
- }
- catch (Exception e)
- {
- this.LogError(e);
- lcRetVal += "FileUploadException";
- }
- return lcRetVal;
- }
- private string L(string name, params object[] args)
- {
- return LocalizationHelper.GetSource(IwbZeroConsts.LocalizationSourceName).GetString(name, args);
- }
- }
- }
|