示例#1
0
        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);
        }
示例#2
0
        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));
        }
示例#4
0
        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", "文档转换失败"));
            }
        }