/// <summary> /// 获取唯一一个 /// </summary> /// <param name="relationalId"></param> /// <param name="category"></param> /// <returns></returns> public async Task <FileItem> GetOnly(Guid relationalId, FileItemCategory category) { var fileItem = await Repository.GetAll().FirstOrDefaultAsync(v => v.RelationalId == relationalId && v.Category == category); return(fileItem); }
/// <summary> /// 删除所有关联的文件 /// </summary> /// <param name="relationalId"></param> /// <param name="fileItemCategory"></param> /// <returns></returns> public async Task DeleteAll(Guid relationalId, FileItemCategory fileItemCategory) { foreach (var one in GetAll(relationalId, fileItemCategory)) { await DeleteAsync(one.Id); } }
/// <summary> /// 获取相应文件夹地址 /// </summary> /// <param name="hostingEnvironment"></param> /// <param name="category"></param> /// <returns></returns> public static string GetFileFolder(IHostingEnvironment hostingEnvironment, FileItemCategory category) { var folderPath = Path.Join(hostingEnvironment.ContentRootPath, FileItemsPath + Enum.GetName(typeof(FileItemCategory), category)); if (!Directory.Exists(folderPath)) { Directory.CreateDirectory(folderPath); } return(folderPath); }
/// <summary> /// 创建唯一一个 /// </summary> /// <param name="file"></param> /// <param name="relationalId"></param> /// <param name="category"></param> /// <returns></returns> public async Task <FileItem> CreateOnly(IFormFile file, Guid?relationalId, FileItemCategory category) { // 先删除原有的,包括数据库部分与文件部分 if (!relationalId.HasValue) { throw new UserFriendlyException("请提供RelationalId"); } await DeleteAll((Guid)relationalId, category); CurrentUnitOfWork.SaveChanges(); // 再创建 var obj = CreateFile(_hostingEnvironment, file, relationalId, category, CurrentUnitOfWork.GetTenantId()); return(await Repository.InsertAsync(obj)); }
/// <summary> /// 检查权限的方法 /// </summary> /// <param name="fileItemCategory"></param> /// <exception cref="AbpAuthorizationException"></exception> private void CheckPermission(FileItemCategory fileItemCategory) { switch (fileItemCategory) { case FileItemCategory.Project: if (!PermissionChecker.IsGranted(PermissionNames.ProjectManagement)) { throw new AbpAuthorizationException("你没有权限上传文件!"); } break; case FileItemCategory.BimModel: if (!PermissionChecker.IsGranted(PermissionNames.ProjectManagementModify)) { throw new AbpAuthorizationException("你没有权限上传模型文件!"); } break; } }
/// <summary> /// 在指定路径下存放文件,若不存在则创建,可以创建多个 /// </summary> /// <param name="file"></param> /// <param name="relationalId"></param> /// <param name="category"></param> /// <returns></returns> public async Task <FileItem> Create(IFormFile file, Guid?relationalId, FileItemCategory category) { var obj = CreateFile(_hostingEnvironment, file, relationalId, category, CurrentUnitOfWork.GetTenantId()); return(await Repository.InsertAsync(obj)); }
/// <summary> /// 创建一个文件的静态方法 /// </summary> /// <param name="hostingEnvironment"></param> /// <param name="file"></param> /// <param name="relationalId"></param> /// <param name="category"></param> /// <param name="tenantId"></param> /// <returns></returns> public static FileItem CreateFile(IHostingEnvironment hostingEnvironment, IFormFile file, Guid?relationalId, FileItemCategory category, int?tenantId) { // 重命名未guid名字 var id = Guid.NewGuid(); var guidFilePath = "/" + id + Path.GetExtension(file.FileName); using (var stream = new FileStream( GetFileFolder(hostingEnvironment, category) + guidFilePath, FileMode.Create)) { file.CopyTo(stream); } // 插入数据库 return(new FileItem { Id = id, TenantId = tenantId, FileName = file.FileName, // 这里使用的是相对地址 FilePath = FileItemsPath + category + guidFilePath, FileSize = file.Length, FileType = Path.GetExtension(file.FileName), //含“.” RelationalId = relationalId, Category = category }); }
/// <summary> /// 取得相关的所有FileItem /// </summary> /// <param name="relationalId"></param> /// <param name="category"></param> /// <returns></returns> public IQueryable <FileItem> GetAll(Guid?relationalId, FileItemCategory category) { return(Repository.GetAll() .Where(v => v.Category == category) .WhereIf(relationalId.HasValue, v => v.RelationalId == relationalId)); }
/// <summary> /// 拍照照片名字为梁片编号-工序-工作项-时间 /// </summary> /// <param name="file"></param> /// <param name="relationalId"></param> /// <param name="category"></param> /// <param name="tenantId"></param> /// <returns></returns> public async Task <FileItem> UploadAssignmentFile(IFormFile file, Guid?relationalId, FileItemCategory category, int?tenantId) { var fileItem = FileItemManager.CreateFile(_hostingEnvironment, file, relationalId, category, tenantId); // 如果没有relationalId则返回空 if (!fileItem.RelationalId.HasValue) { return(null); } var assignment = await GetAsync((Guid)fileItem.RelationalId); // SubProjectId为空,则编号不会填入 var subProject = assignment.SubProjectId.HasValue ? _repositorySubProject.Get((Guid)assignment.SubProjectId) : null; var pt = _repositoryPt.Get(assignment.ProcedureStepTaskItemId); var procedureStep = _repositoryProcedureStep.Get(pt.ProcedureStepId); var taskItem = _repositoryTaskItem.Get(pt.TaskItemId); // 填写文件的名字,然后再插入 fileItem.FileName = subProject?.Code + "-" + procedureStep.Name + "-" + taskItem.Name + "-" + DateTime.Now.ToString("yyMMddHHmmss"); return(await _repositoryFileItem.InsertAsync(fileItem)); }
public async Task <FileResult> Get(Guid?id, FileItemCategory types = 0) { var fileItem = new FileItem(); switch (types) { case FileItemCategory.QrCode: { if (!id.HasValue) { throw new UserFriendlyException("请提供id"); } // 边生成边下载,这里的id是subProjectId fileItem.FilePath = await _planManager.SaveQrCode((Guid)id); fileItem.FileName = Path.GetFileName(fileItem.FilePath); break; } case FileItemCategory.QrCodesZip: { // 提前生成了zip,这里只做了下载操作 fileItem.FilePath = _planManager.GetQrCodesZipPath(); fileItem.FileName = DateTime.Now.ToString("yyMMddhhmmss") + Path.GetFileName(fileItem.FilePath); break; } case FileItemCategory.ProjectVideo: case FileItemCategory.ExaminationReport: { if (!id.HasValue) { throw new UserFriendlyException("请提供id"); } // 这里的id是relationalId,即projectId // 为什么?因为可能video部分要改成多行模式 fileItem = await _fileItemManager.GetOnly((Guid)id, types); break; } default: { if (!id.HasValue) { throw new UserFriendlyException("请提供id"); } // 默认情况,只用id来进行下载 fileItem = await _fileItemManager.GetAsync((Guid)id); break; } } if (fileItem.FilePath == null) { throw new UserFriendlyException("下载出错错误"); } //获取文件流 var stream = System.IO.File.OpenRead(fileItem.FilePath); //获取文件的ContentType var provider = new FileExtensionContentTypeProvider(); var memi = provider.Mappings[Path.GetExtension(fileItem.FilePath)]; return(File(stream, memi, fileItem.FileName)); }