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); } }