Ejemplo n.º 1
0
        /// <summary>生成HTML</summary>
        private async Task <string> GenerateHtmlAsync(UploadFileContext context)
        {
            string destFile = null;

            if (context.UploadFileDoc.HtmlFileId.IsNullOrEmpty())
            {
                var ext         = context.UploadFileFormat.Ext.First();
                var converter   = GetFileFormatConverters(ext).HtmlConverter;
                var sourceFile  = context.UploadFileDoc.RelativePath;
                var newFileName = Path.GetFileNameWithoutExtension(sourceFile) + "." + converter.NewExt;
                var newFileDoc  = this.UploadFileHandler.BeginBuild(newFileName, Encoding.UTF8.WebName);
                sourceFile = this.UploadFileHandler.UploadPath + sourceFile;
                destFile   = this.UploadFileHandler.UploadPath + newFileDoc.RelativePath;
                var success = await converter.ExecuteAsync(sourceFile, destFile);

                await this.UploadFileHandler.EndBuild(success, FileConvertType.Html, newFileDoc, context.UploadFileDoc, null);
            }
            else
            {
                var newFileDoc = await this.UploadFileHandler.GetAsync(context.UploadFileDoc.HtmlFileId);

                destFile = this.UploadFileHandler.UploadPath + newFileDoc.RelativePath;
            }
            return(File.ReadAllText(destFile, Encoding.UTF8));
        }
Ejemplo n.º 2
0
        /// <summary>生成全文</summary>
        private async Task <string> GenerateFulltextAsync(UploadFileContext context)
        {
            if (!context.UploadFileDoc.FullTextFileId.IsNullOrEmpty())
            {
                return(context.UploadFileDoc.FullTextFileId);
            }
            var ext         = context.UploadFileFormat.Ext.First();
            var converter   = GetFileFormatConverters(ext).FulltextConverter;
            var sourceFile  = context.UploadFileDoc.RelativePath;
            var newFileName = Path.GetFileNameWithoutExtension(sourceFile) + "." + converter.NewExt;
            var newFileDoc  = this.UploadFileHandler.BeginBuild(newFileName, Encoding.UTF8.WebName);

            sourceFile = this.UploadFileHandler.UploadPath + sourceFile;
            string pdfFile = null;

            if (context.UploadFileDoc != context.NormalizedFileDoc)
            {
                pdfFile = this.UploadFileHandler.UploadPath + context.NormalizedFileDoc.RelativePath;
            }
            var destFile = this.UploadFileHandler.UploadPath + newFileDoc.RelativePath;
            var success  = await converter.ExecuteAsync(sourceFile, pdfFile, destFile);

            await this.UploadFileHandler.EndBuild(success, FileConvertType.FullText, newFileDoc, context.UploadFileDoc, context.NormalizedFileDoc);

            if (!success)
            {
                newFileDoc = context.NormalizedFileDoc;
            }
            return(newFileDoc.FileId);
        }
Ejemplo n.º 3
0
        /// <summary>生成文本文件内容</summary>
        private string BuildContent(UploadFileContext context)
        {
            var fileDoc = context.UploadFileDoc;
            var file    = this.UploadFileHandler.UploadPath + fileDoc.RelativePath;

            return(File.ReadAllText(file, Encoding.UTF8));
        }
Ejemplo n.º 4
0
        /// <summary>生成图片</summary>
        private async Task GenerateImageAsync(UploadFileContext context)
        {
            if (context.UploadFileDoc.FileId == context.UploadFileDoc.ImageFileId)
            {
                context.NormalizedFileDoc = context.UploadFileDoc;
                return;
            }
            if (!context.UploadFileDoc.ImageFileId.IsNullOrEmpty())
            {
                var newFileId = context.UploadFileDoc.ImageFileId;
                context.NormalizedFileDoc = await this.UploadFileHandler.GetAsync(newFileId);

                return;
            }
            var ext         = context.UploadFileFormat.Ext.First();
            var converter   = GetFileFormatConverters(ext).ImageConverter;
            var sourceFile  = context.UploadFileDoc.RelativePath;
            var newFileName = Path.GetFileNameWithoutExtension(sourceFile) + "." + converter.NewExt;
            var newFileDoc  = this.UploadFileHandler.BeginBuild(newFileName);

            sourceFile = this.UploadFileHandler.UploadPath + sourceFile;
            var destFile = this.UploadFileHandler.UploadPath + newFileDoc.RelativePath;
            var success  = await converter.ExecuteAsync(sourceFile, destFile);

            await this.UploadFileHandler.EndBuild(success, FileConvertType.Image, newFileDoc, context.UploadFileDoc, null);

            context.NormalizedFileDoc = newFileDoc;
        }
Ejemplo n.º 5
0
 /// <summary>生成URL方式的数据</summary>
 private async Task BuildUrl(TDocument doc, UploadFileContext context)
 {
     doc.SourceName        = context.UploadFileDoc.FileName;
     doc.SourceStorageType = IndexStorageType.Url;
     doc.SourceContentRef  = context.UploadFileDoc.RelativePath.Replace('\\', '/');
     await BuildUploadFile(doc, context);
 }
Ejemplo n.º 6
0
        /// <summary>生成上传文件相关的数据</summary>
        private async Task BuildUploadFile(TDocument doc, UploadFileContext context)
        {
            context.UploadFileFormat = Path.GetExtension(context.UploadFileDoc.FileName).GetFileFormat();
            if (context.UploadFileFormat.GeneratePdf)
            {
                await GeneratePdfAsync(context);
            }
            else if (context.UploadFileFormat.GenerateImage)
            {
                await GenerateImageAsync(context);
            }
            else
            {
                context.NormalizedFileDoc = context.UploadFileDoc;
            }
            if (doc.Name.IsNullOrEmpty())
            {
                doc.Name = context.NormalizedFileDoc.FileName;
            }
            if (context.NormalizedFileDoc == context.UploadFileDoc)
            {
                doc.StorageType = doc.SourceStorageType.Value;
                doc.ContentRef  = doc.SourceContentRef;
                context.NormalizedFileFormat = context.UploadFileFormat;
            }
            else
            {
                if (doc.SourceStorageType.Value == IndexStorageType.File)
                {
                    var fileObjectId = await this.UploadFileHandler.InsertMongoAsync(context.NormalizedFileDoc);

                    doc.StorageType = IndexStorageType.File;
                    doc.ContentRef  = fileObjectId.ToString();
                }
                else
                {
                    doc.StorageType = IndexStorageType.Url;
                    doc.ContentRef  = context.NormalizedFileDoc.RelativePath.Replace('\\', '/');
                }
                context.NormalizedFileFormat = Path.GetExtension(context.NormalizedFileDoc.FileName).GetFileFormat();
            }
            doc.DataType = context.NormalizedFileFormat.AppDataType.ToEnum <IndexAppDataType>();
        }
Ejemplo n.º 7
0
        /// <summary>生成缩略图</summary>
        private async Task <string> GenerateThumbnailAsync(UploadFileContext context)
        {
            string ext        = null;
            string sourceFile = null;

            if (context.NormalizedFileDoc != context.UploadFileDoc)
            {
                if (!context.NormalizedFileDoc.ThumbnailFileId.IsNullOrEmpty())
                {
                    return(context.NormalizedFileDoc.ThumbnailFileId);
                }
                if (context.NormalizedFileFormat.GenerateThumbnail)
                {
                    ext        = context.NormalizedFileFormat.Ext.First();
                    sourceFile = context.NormalizedFileDoc.RelativePath;
                }
            }
            if (!context.UploadFileDoc.ThumbnailFileId.IsNullOrEmpty())
            {
                return(context.UploadFileDoc.ThumbnailFileId);
            }
            if (ext == null)
            {
                ext        = context.UploadFileFormat.Ext.First();
                sourceFile = context.UploadFileDoc.RelativePath;
            }
            var converter   = GetFileFormatConverters(ext).ThumbnailConverter;
            var newFileName = Path.GetFileNameWithoutExtension(sourceFile) + "." + converter.NewExt;
            var newFileDoc  = this.UploadFileHandler.BeginBuild(newFileName);

            sourceFile = this.UploadFileHandler.UploadPath + sourceFile;
            var destFile = this.UploadFileHandler.UploadPath + newFileDoc.RelativePath;
            var success  = await converter.ExecuteAsync(sourceFile, destFile);

            await this.UploadFileHandler.EndBuild(success, FileConvertType.Thumbnail, newFileDoc, context.UploadFileDoc, context.NormalizedFileDoc);

            if (!success)
            {
                newFileDoc = context.NormalizedFileDoc;
            }
            return(newFileDoc.FileId);
        }
Ejemplo n.º 8
0
        /// <summary>验证</summary>
        private async Task <PKSKeyValuePair <TDocument, AppDataSaveResult> > Validate(AppDataSaveRequest request, bool replace)
        {
            #region 检查键
            var          doc    = new TDocument();
            IndexAppData oldDoc = null;
            if (request.DataId.IsNullOrEmpty())
            {
                if (request.ResourceKey.IsNullOrEmpty())
                {
                    ApiServiceExceptionCodes.ResourceKeyNotExists.ThrowUserFriendly("缺少参数!", $"ResourceKey不存在!");
                }
                request.DataId = request.ResourceKey.ToUpperInvariant().ToMD5();
            }
            else
            {
                oldDoc = await Accessor.AsQueryable().FirstAsync(e => e.Id == request.DataId);
            }
            doc.Id       = request.DataId;
            doc.DataId   = request.DataId;
            doc.Name     = request.Name;
            doc.IsOnline = false;
            #endregion
            var context = new UploadFileContext();
            if (request.ContentType != IndexAppContentType.File)
            {
                #region 非文件应用数据
                if (request.Content == null)
                {
                    if (request.UploadFileId.IsNullOrEmpty())
                    {
                        ExceptionCodes.MissingParameterValue.ThrowUserFriendly("缺少参数!", $"Content不存在!");
                    }
                    context.UploadFileDoc = await this.UploadFileHandler.GetAsync(request.UploadFileId);

                    doc.SourceName           = context.UploadFileDoc.FileName;
                    doc.SourceStorageType    = IndexStorageType.Url;
                    doc.SourceContentRef     = context.UploadFileDoc.RelativePath.Replace('\\', '/');
                    context.UploadFileFormat = Path.GetExtension(context.UploadFileDoc.FileName).GetFileFormat();
                }
                switch (request.ContentType)
                {
                case IndexAppContentType.Html:
                    doc.DataType = IndexAppDataType.Html;
                    if (context.UploadFileDoc != null)
                    {
                        if (context.UploadFileFormat.GenerateHtml)
                        {
                            request.Content = await GenerateHtmlAsync(context);
                        }
                        else
                        {
                            request.Content = BuildContent(context);
                        }
                    }
                    break;

                case IndexAppContentType.Json:
                    doc.DataType = IndexAppDataType.Json;
                    if (context.UploadFileDoc != null)
                    {
                        var content = BuildContent(context);
                        request.Content = content.JsonTo();
                    }
                    break;

                default:
                    ExceptionCodes.ParameterParsingFailed.ThrowUserFriendly("参数解析失败!", $"ContentType[{request.ContentType.ToString()}]值无效!");
                    break;
                }
                doc.StorageType = IndexStorageType.Content;
                doc.Content     = JsonUtil.ToObject(request.Content);
                #endregion
            }
            else
            {
                #region 文件应用数据
                if (request.StorageType == FileStorageType.FileSystem && !request.IsOnline)
                {
                    if (request.SourceFile.IsNullOrEmpty())
                    {
                        CopyFromOld(doc, oldDoc);
                    }
                    else
                    {
                        context.UploadFileDoc = await this.UploadFileHandler.OfflineUploadAsync(request.SourceFile);
                        await BuildUrl(doc, context);
                    }
                }
                else
                {
                    if (request.UploadFileId.IsNullOrEmpty())
                    {
                        CopyFromOld(doc, oldDoc);
                    }
                    else
                    {
                        doc.IsOnline          = true;
                        context.UploadFileDoc = await this.UploadFileHandler.GetAsync(request.UploadFileId);

                        if (request.StorageType == FileStorageType.Mongo)
                        {
                            var fileObjectId = await this.UploadFileHandler.InsertMongoAsync(context.UploadFileDoc);

                            doc.SourceStorageType = IndexStorageType.File;
                            doc.SourceContentRef  = fileObjectId.ToString();
                            await BuildUploadFile(doc, context);
                        }
                        else
                        {
                            if (!request.SourceFile.IsNullOrEmpty())
                            {
                                await this.UploadFileHandler.OnlineUploadAsync(context.UploadFileDoc, request.SourceFile);
                            }
                            await BuildUrl(doc, context);
                        }
                    }
                }
                #endregion
            }
            #region 检查属性
            if (!replace || oldDoc == null)
            {
                doc.CreateBy   = request.Uploader;
                doc.CreateDate = DateTime.UtcNow;
            }
            else
            {
                doc.CreateBy   = oldDoc.CreateBy;
                doc.CreateDate = oldDoc.CreateDate;
            }
            doc.LastUpdatedBy   = request.Uploader;
            doc.LastUpdatedDate = DateTime.UtcNow;
            doc.RawAdapter      = request.RawAdapter;
            doc.System          = request.System;
            doc.ResourceType    = request.ResourceType;
            doc.ResourceKey     = request.ResourceKey;
            var pair = new PKSKeyValuePair <TDocument, AppDataSaveResult>();
            pair.Key = doc;
            var result = new AppDataSaveResult();
            result.DataId = doc.DataId;
            if (request.GenerateThumbnail && context.UploadFileDoc != null && context.UploadFileFormat.GenerateThumbnail)
            {
                result.Thumbnail = await GenerateThumbnailAsync(context);
            }
            if (request.GenerateFulltext && context.UploadFileDoc != null && context.UploadFileFormat.GenerateFulltext)
            {
                result.Fulltext = await GenerateFulltextAsync(context);
            }
            pair.Value = result;
            return(pair);

            #endregion
        }