Exemple #1
0
        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);
        }
Exemple #2
0
        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)));
            }
        }
Exemple #3
0
        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();
            }
        }
Exemple #4
0
        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();
                    }
                }
            }
        }