public DistributedFileInfo CreateOrUpdateFile(string filePath, Stream stream)
        {
            var segments = filePath.Split('/', '\\').Where(m => !string.IsNullOrEmpty(m)).ToArray();
            var key      = string.Join("/", "FilePath:" + this.tenant.Site.Id, segments);

            using (ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(this.redisConfig.GetValue <string>("RedisConfiguration", "localhost")))
            {
                var db = connection.GetDatabase();
                if (!db.KeyExists(key))
                {
                    //如果文件没有映射,创建目录结构
                    CreateDirectory(key, db);
                }
                //保存文件得到文件元数据
                var template = new OperationsTemplate(master);
                var result   = template.SaveFileByStream(segments.Last(), stream).Result;

                DistributedFileInfo fileInfo = new DistributedFileInfo()
                {
                    IsDirectory  = false,
                    Length       = result.Size,
                    LastModified = DateTimeOffset.FromUnixTimeSeconds(result.LastModified),
                    Name         = result.Name,
                    FileId       = result.FileId,
                    ContentType  = result.ContentType,
                    Url          = template.GetFileUrl(result.FileId).Result,
                };
                var value = JsonConvert.SerializeObject(fileInfo);
                db.StringSet(key, value);
                return(fileInfo);
            }
        }
        public DistributedFileStream GetFileStream(string filePath)
        {
            var segments = filePath.Split('/', '\\').Where(m => !string.IsNullOrEmpty(m)).ToArray();
            var key      = string.Join("/", "FilePath:" + this.tenant.Site.Id, segments);

            using (ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(this.redisConfig.GetValue <string>("RedisConfiguration", "localhost")))
            {
                var db       = connection.GetDatabase();
                var fileInfo = db.StringGet(key);
                if (fileInfo.HasValue)
                {
                    var file     = JsonConvert.DeserializeObject <DistributedFileInfo>(fileInfo);
                    var template = new OperationsTemplate(master);
                    return(new DistributedFileStream()
                    {
                        Info = file, Stream = template.GetFileStream(file.FileId).Result
                    });
                }
                return(null);
            }
        }