public void TestFileCreateOrUpdate() { var manager = new FileManager(new SystemFileStroe()); var target = FileId.FromFileId("2.jpg"); using (var fs = File.OpenRead("1.jpg")) { manager.CreateOrUpdate(target, fs); } Assert.IsTrue(manager.Exists(target)); manager.Delete(target); }
public Stream GetImage(string key) { ExceptionHelper.ThrowIfNullOrWhiteSpace(key, paramName: "key"); string query; key = FormatKey(key, out query); string extension; var processors = ImageProcessor.ParseQuery(query, out extension); if (processors.Length > 0) { if (String.IsNullOrWhiteSpace(extension)) { extension = Path.GetExtension(key); } var formatQuery = String.Join("|", processors.Select(p => p.Arguments.ToQuery())); if (processors.Length > 1) { formatQuery = new Flh.Security.MD5().Encrypt(formatQuery); } var currentkey = String.Format("temp/{0}@{1}", key, formatQuery); if (!currentkey.EndsWith(extension)) { currentkey += extension; } try { var stream = GetFile(FileId.FromFileId(currentkey)); if (stream == null) { using (var source = GetFile(FileId.FromFileId(key))) { if (source == null) { return(null); } stream = ImageProcessor.Process(source, new ImageProcessorSetting(), processors); _OssClient.PutObject(_BucketName, currentkey, stream, new ObjectMetadata()); stream.Position = 0; return(stream); } } return(stream); } catch (OssException ex) { if (ex.ErrorCode == OssErrorCode.NoSuchKey) { using (var source = GetFile(FileId.FromFileId(key))) { var stream = ImageProcessor.Process(source, new ImageProcessorSetting(), processors); _OssClient.PutObject(_BucketName, currentkey, stream, new ObjectMetadata()); stream.Position = 0; return(stream); } } else { throw ex; } } } else { return(GetFile(FileId.FromFileId(key))); } }
public void Edit(long uid, string no, IClassEditInfo info) { ExceptionHelper.ThrowIfNotId(uid, "uid"); ExceptionHelper.ThrowIfNull(info, "info"); var entity = GetEnabled(no); bool update = false; if (!String.IsNullOrWhiteSpace(info.Name) && entity.name != info.Name.Trim()) { var oldName = entity.name; entity.name = info.Name.Trim(); var entitys = _ClassesRepository.Entities.Where(c => c.no.StartsWith(no) && c.full_name != null).ToArray(); foreach (var item in entitys) { item.full_name = Utility.ReplyFullName(item.full_name, oldName, info.Name); } update = true; } if (!String.IsNullOrWhiteSpace(info.EnName) && entity.name_en != info.EnName.Trim()) { var oldEnName = entity.name_en; entity.name_en = info.EnName.Trim(); var entitys = _ClassesRepository.Entities.Where(c => c.no.StartsWith(no) && c.full_name_en != null).ToArray(); foreach (var item in entitys) { item.full_name_en = Utility.ReplyFullName(item.full_name_en, oldEnName, info.EnName); } update = true; } if (entity.order_by != info.Order) { entity.order_by = info.Order; update = true; } if (!String.IsNullOrWhiteSpace(info.Introduce) && info.Introduce.Trim() != entity.introduce) { entity.introduce = info.Introduce.Trim(); update = true; } if (!String.IsNullOrWhiteSpace(info.IndexImage) && info.IndexImage.Trim() != entity.indexImage) { var sourceId = FileId.FromFileId(info.IndexImage); if (sourceId.IsTempId) { var target = sourceId.ToStorageId(); _FileManager.Copy(sourceId, target); sourceId = target; } entity.indexImage = sourceId.Id; update = true; } if (!String.IsNullOrWhiteSpace(info.ListImage) && info.ListImage.Trim() != entity.listImage) { var sourceId = FileId.FromFileId(info.ListImage); if (sourceId.IsTempId) { var target = sourceId.ToStorageId(); _FileManager.Copy(sourceId, target); sourceId = target; } entity.listImage = sourceId.Id; update = true; } if (update) { _ClassesRepository.SaveChanges(); } }
public void AddOrUpdateProducts(Data.Product[] products) { ExceptionHelper.ThrowIfNull(products, "products"); if (products.Any()) { foreach (var item in products) { VeriryEntity(item); } //更新已存在的产品 var updatingProducts = products.Where(p => p.pid > 0).ToArray(); foreach (var newProduct in updatingProducts) { var oldProduct = AllProducts.FirstOrDefault(p => p.pid == newProduct.pid); if (oldProduct != null) { using (var scope = new System.Transactions.TransactionScope()) { OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.name, (p, v) => p.name = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.enName, (p, v) => p.enName = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.description, (p, v) => p.description = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.enDescription, (p, v) => p.enDescription = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.size, (p, v) => p.size = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.enSize, (p, v) => p.enSize = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.color, (p, v) => p.color = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.enColor, (p, v) => p.enColor = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.material, (p, v) => p.material = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.enMaterial, (p, v) => p.enMaterial = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.technique, (p, v) => p.technique = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.enTechnique, (p, v) => p.enTechnique = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.keywords, (p, v) => p.keywords = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.enKeywords, (p, v) => p.enKeywords = v); OverrideIfNotNullNotWhiteSpace(oldProduct, newProduct, p => p.classNo, (p, v) => p.classNo = v); var newProductFileId = FileId.FromFileId(newProduct.imagePath); var newFileID = newProductFileId.ToStorageId(); var imgChange = oldProduct.imagePath != newProduct.imagePath && oldProduct.imagePath != newFileID.Id; if (imgChange) { oldProduct.imagePath = newFileID.Id; } oldProduct.minQuantity = newProduct.minQuantity; oldProduct.deliveryDay = newProduct.deliveryDay; oldProduct.unitPrice = newProduct.unitPrice; oldProduct.sortNo = newProduct.sortNo; oldProduct.updated = DateTime.Now; if (newProduct.updater > 0) { oldProduct.updater = newProduct.updater; } _Repository.SaveChanges(); UpdateSearchIndex(oldProduct.pid);//更新索引 if (newProductFileId.IsTempId) { _FileStore.Copy(newProductFileId, newFileID);//将临时文件复制到永久文件处 } scope.Complete(); } System.Threading.Thread.Sleep(300);//同时添加太多产品,搜索引擎更新太频繁会报错(阿里云限制每秒频率,除非加钱),这里添加一个产品后先休眠几百毫秒 } } //新增的产品 var addingProducts = products.Where(p => p.pid <= 0).ToArray(); foreach (var entity in addingProducts) { using (var scope = new System.Transactions.TransactionScope()) { entity.created = DateTime.Now; entity.updated = DateTime.Now; entity.enabled = true; var temFileId = FileId.FromFileId(entity.imagePath); var newFileID = temFileId.ToStorageId(); entity.imagePath = newFileID.Id; _Repository.Add(entity); _Repository.SaveChanges(); if (temFileId.IsTempId) { _FileStore.Copy(temFileId, newFileID); //将临时文件复制到永久文件处 } UpdateSearchIndex(entity.pid); //更新索引 scope.Complete(); } } } }