Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
 /// <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);
     }
 }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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));
        }
Beispiel #5
0
        /// <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;
            }
        }
Beispiel #6
0
        /// <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));
        }
Beispiel #7
0
        /// <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
            });
        }
Beispiel #8
0
 /// <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));
        }
Beispiel #10
0
        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));
        }