public static File CreateDirectoryRecord(string name, string folder, string path, User user) { if (string.IsNullOrWhiteSpace(name)) { throw new FileNameIsEmptyException(); } var ret = new File() { // Name: 文件夹名 Name = name, // Type: "text/directory" Type = "text/directory", // Folder: 上层目录名 Folder = folder, // Path: 该文件夹的路径: Folder + Name Path = path, // Guid: [空] Guid = null, // StorageName: [空] StorageName = "", // User: 创建的用户 User = user, // Status: 已确认 Status = FileStatus.Confirmed, // Size: [空] Size = 0, // Md5: [空] Md5 = null }; ret.GetPermission(); return ret; }
private IActionResult RequestUploadFile(FileUploadRequestModel requestModel, User loginUser) { var ofile = _databaseService.Files. FirstOrDefault(s => s.Md5 == requestModel.Md5.ToLower() && // 哈希相等 s.Size == requestModel.Size && // 文件大小相等 s.Status == Models.Entities.File.FileStatus.Confirmed // 文件已上传完 ); var file = new EntityFile(); if (ofile != null) { file.Path = requestModel.Path; file.Type = requestModel.Type; file.Folder = Path.GetDirectoryName(requestModel.Path) ?? ""; file.Name = Path.GetFileName(requestModel.Path) ?? ""; file.Guid = ofile.Guid; file.StorageName = ofile.StorageName; file.User = loginUser; file.Status = Models.Entities.File.FileStatus.Confirmed; file.Size = ofile.Size; file.Md5 = ofile.Md5.ToLower(); } else { file.Path = requestModel.Path; file.Type = requestModel.Type; file.Folder = Path.GetDirectoryName(requestModel.Path) ?? ""; file.Name = Path.GetFileName(requestModel.Path) ?? ""; if (string.IsNullOrEmpty(file.Name)) { throw new FileNameIsEmptyException("The file name is empty."); } file.Guid = Guid.NewGuid().ToString().ToLower(); // TODO 检查 Guid 是否有重复 file.StorageName = $"{file.Guid[0]}{file.Guid[1]}/{file.Guid[2]}{file.Guid[3]}/{file.Guid}{Path.GetExtension(requestModel.Path)}"; file.StorageName = Path.Join(_tencentCosManagement.Prefix, file.StorageName).Replace("\\", "/"); file.User = loginUser; file.Status = Models.Entities.File.FileStatus.Pending; file.Size = requestModel.Size; file.Md5 = requestModel.Md5.ToLower(); } // file.Path = file.Folder.Replace("\\", "/"); file.Folder = file.Folder.Replace("\\", "/"); file.GetPermission(); _databaseService.Files.Add(file); Dictionary <string, object> token; if (file.Status == Models.Entities.File.FileStatus.Pending) { try { token = _tencentCos.GetUploadToken(file); } catch (Exception e) { _logger.LogError(e, e.Message, e.Data); throw new UnexpectedException(e.Message); } SetApiResultStatus(ApiResultStatus.StorageUploadContinue); } else { token = null; SetApiResultStatus(ApiResultStatus.StorageUploadSkip); } _databaseService.SaveChanges(); return(Ok(new FileUploadRequestResultModel(file, token, _tencentCosManagement))); }