public DocConvertResultDto CreateConvertTask(OSSObjectDto ossObjectDto) { Requires.NotNull(ossObjectDto, nameof(ossObjectDto)); var request = new CreateOfficeConversionTaskRequest { AcceptFormat = FormatType.JSON, Project = m_IMMSetting.Project, SrcUri = ossObjectDto.OSSPath, SrcType = ossObjectDto.FileType, TgtType = m_IMMSetting.ConvertType, TgtUri = m_IMMSetting.GetTgtUri(ossObjectDto.IMMKey) }; var task = Request(request); if (task == null) { return(null); } var result = new DocConvertResultDto(task); if (result.Status == DocConvertStatus.Failed) { m_Logger.LogWarning($"创建转换任务失败:{JsonConvert.SerializeObject(task)}"); } return(result); }
public virtual SimplyResult <OSSObjectDto> GetOSSObject(string ossPath) { Requires.NotNullOrEmpty(ossPath, nameof(ossPath)); var ossObject = new OSSObjectDto(ossPath); var ossObjectMetadata = m_OSSService.GetObjectMetadata(ossObject.Bucket, ossObject.FilePath); if (ossObjectMetadata == null) { return(SimplyResult.Fail <OSSObjectDto>("FileNoExist", "文档不存在")); } var ossFileType = string.Empty; if (!string.IsNullOrEmpty(ossObjectMetadata.ContentDisposition)) { var fileName = Regexs.ContentDispositionFileNameRegex.Match(ossObjectMetadata.ContentDisposition).Value; ossFileType = Path.GetExtension(fileName).TrimStart('.'); } if (string.IsNullOrEmpty(ossFileType)) { Resources.ContentTypeDict.TryGetValue(ossObjectMetadata.ContentType.Split(';')[0].ToLower(), out ossFileType); } if (string.IsNullOrEmpty(ossFileType) || !Resources.IMMFileTypeDict.TryGetValue(ossFileType, out var immFileType)) { return(SimplyResult.Fail <OSSObjectDto>("UnsupportedFile", "不支持的文件类型")); } ossObject.FileType = immFileType; ossObject.ETag = ossObjectMetadata.ETag; return(SimplyResult.Ok(ossObject)); }
public override async Task <SimplyResult <DocConvertResultDto> > GenerateAsync(OSSObjectDto ossObjectDto, bool isRegenerate) { Requires.NotNull(ossObjectDto, nameof(ossObjectDto)); var token = await GetTokenAsync(ossObjectDto.Bucket, ossObjectDto.FilePath, ossObjectDto.HashPath, isRegenerate); var generateResult = new DocConvertResultDto { PreviewUrl = GetPreviewUrl(ossObjectDto.Bucket, ossObjectDto.FilePath, token), Status = DocConvertStatus.Finished, FileType = ossObjectDto.FileType }; return(SimplyResult.Ok(generateResult)); }
public virtual async Task <SimplyResult <DocConvertResultDto> > GenerateAsync(OSSObjectDto ossObjectDto, bool isRegenerate) { Requires.NotNull(ossObjectDto, nameof(ossObjectDto)); var generateResult = await m_PreviewRedisService.GetAsync(ossObjectDto.HashPath); if ((generateResult?.ETag ?? string.Empty) != ossObjectDto.ETag) { isRegenerate = true; } if (isRegenerate) { generateResult = m_PreviewSetting.IsSyncConvert ? m_IMMService.Convert(ossObjectDto) : m_IMMService.CreateConvertTask(ossObjectDto); } if (generateResult?.Status == DocConvertStatus.Running && m_PreviewSetting.TaskPollingSpend > 0) { generateResult = await QueryConvertTaskAsync(generateResult.TaskId); } switch (generateResult?.Status) { case DocConvertStatus.Running: case DocConvertStatus.Finished: generateResult.PreviewUrl = m_IMMSetting.GetPreviewUrl(ossObjectDto.IMMKey); generateResult.FileType = ossObjectDto.FileType; await m_PreviewRedisService.SetAsync(ossObjectDto.HashPath, generateResult); var token = await GetTokenAsync(m_IMMSetting.Bucket, $"{m_IMMSetting.GetPrefix(ossObjectDto.IMMKey)}/*", ossObjectDto.HashPath, isRegenerate); generateResult.PreviewUrl = GetFullPreviewUrl(generateResult.PreviewUrl, token); return(SimplyResult.Ok(generateResult)); default: await m_PreviewRedisService.DeleteAsync(ossObjectDto.HashPath); return(SimplyResult.Fail <DocConvertResultDto>("GenerateFail", "文档转换失败")); } }