コード例 #1
0
        public sys_file UploadFile(Stream stream, string fileSuffix, string fileType, string contentType, string objectId, string fileName = "")
        {
            var id          = Guid.NewGuid().ToString();
            var hash_code   = SHAUtil.GetFileSHA1(stream);
            var newFileName = $"{id}.{fileSuffix}"; // GUID 生成文件名

            // 保存图片到本地
            // TODO:执行失败回滚操作
            var config = StoreConfig.Config;

            ServiceContainer.Resolve <IStoreStrategy>(config.Type).Upload(stream, newFileName, out var filePath);

            var sysFile = new sys_file()
            {
                sys_fileId   = id,
                name         = fileName,
                real_name    = newFileName,
                hash_code    = hash_code,
                file_type    = fileType,
                objectId     = objectId,
                content_type = contentType,
                DownloadUrl  = GetDownloadUrl(id)
            };

            CreateData(sysFile);

            return(sysFile);
        }
コード例 #2
0
        private string DownloadImage(string url, string objectid)
        {
            var result    = HttpUtil.DownloadImage(url, out var contentType);
            var stream    = StreamUtil.BytesToStream(result);
            var hash_code = SHAUtil.GetFileSHA1(stream);

            var config   = StoreConfig.Config;
            var id       = Guid.NewGuid().ToString();
            var fileName = $"{id}.{url.Substring(url.LastIndexOf("/") + 1).GetFileType()}";

            ServiceContainer.Resolve <IStoreStrategy>(config?.Type).Upload(stream, fileName, out var filePath);

            var data = new sys_file()
            {
                sys_fileId   = id,
                name         = fileName,
                real_name    = fileName,
                hash_code    = hash_code,
                file_type    = "gallery",
                content_type = contentType,
                objectId     = objectid
            };

            return(Broker.Create(data));
        }
コード例 #3
0
ファイル: WeChatService.cs プロジェクト: CarlDuFromChina/blog
        /// <summary>
        /// 验证微信签名
        /// </summary>
        /// <param name="signature"></param>
        /// <param name="timestamp"></param>
        /// <param name="nonce"></param>
        /// <param name="echostr"></param>
        /// <returns></returns>
        public static bool CheckSignature(string signature, string timestamp, string nonce, string echostr)
        {
            string[] arrTmp = { _token, timestamp, nonce };
            Array.Sort(arrTmp);
            var tmpStr = string.Join("", arrTmp);

            tmpStr = SHAUtil.GetSwcSHA1(tmpStr).ToLower();
            return(tmpStr == signature);
        }
コード例 #4
0
        public void GetStringSHA1Hash_Test()
        {
            var expected1 = "4a48f2d80b881e9ac7d607f23412823e9305e433";
            var sha1_1    = SHAUtil.GetHex16StringSHA1Hash("HelloChinese");

            Assert.Equal(expected1, sha1_1, ignoreCase: true);

            var expected2 = "Skjy2AuIHprH1gfyNBKCPpMF5DM=";
            var sha1_2    = SHAUtil.GetBase64StringSHA1Hash("HelloChinese");

            Assert.Equal(expected2, sha1_2, ignoreCase: true);
        }
コード例 #5
0
        public void GetStringSHA512Hash_Test()
        {
            var expected1 = "ffcdc9277553ea18aae8c1260dd49c5e3bd1055f54fe194745e79f832de6402844efdea7b0c34428d75f640333cd310debf3de03b96c1f13debc8fee4ec91651";
            var sha512_1  = SHAUtil.GetHex16StringSHA512Hash("Hinatahi");

            Assert.Equal(expected1, sha512_1, ignoreCase: true);

            var expected2 = "ZQp2BVSIKdSMldXMxZozrUm7elOK3W3NwEKjkmpdZ8A2YTwGEYJxdihov55phjUXGaLixs+IjA8vNoktL8PIHg==";
            var sha512_2  = SHAUtil.GetBase64StringSHA512Hash("Helloword");

            Assert.Equal(expected2, sha512_2, ignoreCase: true);
        }
コード例 #6
0
        public void GetStringSHA256Hash_Test()
        {
            var expected1 = "872e4e50ce9990d8b041330c47c9ddd11bec6b503ae9386a99da8584e9bb12c4";
            var sha256_1  = SHAUtil.GetHex16StringSHA256Hash("HelloWorld");

            Assert.Equal(expected1, sha256_1, ignoreCase: true);

            var expected2 = "hy5OUM6ZkNiwQTMMR8nd0Rvsa1A66ThqmdqFhOm7EsQ=";
            var sha256_2  = SHAUtil.GetBase64StringSHA256Hash("HelloWorld");

            Assert.Equal(expected2, sha256_2, ignoreCase: true);
        }
コード例 #7
0
        /// <summary>获取图片的二进制数据
        /// </summary>
        /// <param name="imagePath">图片保存路径</param>
        /// <param name="resizeParameter">图片尺寸调整参数</param>
        /// <param name="lastWriteTimeUtc">最后修改时间</param>
        /// <returns></returns>
        public async Task <byte[]> GetImageData(string imagePath, ResizeParameter resizeParameter, DateTime lastWriteTimeUtc)
        {
            try
            {
                var key      = $"{imagePath}{resizeParameter}{lastWriteTimeUtc:yyyy-MM-dd HH:mm:ss}";
                var cacheKey = $"Image:{SHAUtil.GetHex16StringSHA1Hash(key)}";

                byte[] imageBytes;
                if (_option.EnableImageCache)
                {
                    var imageCacheItem = await _imageCache.GetAsync(cacheKey);

                    if (imageCacheItem != null)
                    {
                        return(imageCacheItem.Data);
                    }
                }
                //图片操作
                var image = Image.FromFile(imagePath);
                //对图片进行相应的操作,放大等
                Image resizeImage = null;
                if (resizeParameter.Mode == ResizeMode.Zoom)
                {
                    resizeImage = ImageResize.ImageResizer.Zoom(image, resizeParameter);
                }
                else if (resizeParameter.Mode == ResizeMode.Crop)
                {
                    //图片裁剪
                    resizeImage = ImageResize.ImageResizer.Crop(image, resizeParameter);
                }
                var imageFormat = ImageUtil.GetImageFormatByFormatName(resizeParameter.Format);
                imageBytes = ImageHelper.ImageCompressToBytes(resizeImage, resizeParameter.Quality, imageFormat);
                image.Dispose();

                //只有开启图片缓存情况下,才会对图片再次进行缓存
                if (_option.EnableImageCache)
                {
                    //将图片缓存
                    await _imageCache.SetAsync(cacheKey, new ImageCacheItem(imageBytes), new DistributedCacheEntryOptions()
                    {
                        SlidingExpiration = TimeSpan.FromSeconds(_option.ImageCacheSlidingExpirationSeconds)
                    });
                }
                return(imageBytes);
            }
            catch (Exception ex)
            {
                _logger.LogError("Resize图片出现错误,{0}", ex.Message);
            }
            return(default);
コード例 #8
0
 public void Execute(PersistBrokerPluginContext context)
 {
     var entity = context.Entity as wechat_material;
     switch (context.Action)
     {
         case EntityAction.PreCreate:
         case EntityAction.PreUpdate:
             // 如果素材未上传到系统,则根据url请求图片保存
             if (string.IsNullOrEmpty(entity.sys_fileid))
             {
                 var result = HttpUtil.DownloadImage(entity.url, out var contentType);
                 var id = Guid.NewGuid().ToString();
                 var stream = StreamUtil.BytesToStream(result);
                 var hash_code = SHAUtil.GetFileSHA1(stream);
                 var config = StoreConfig.Config;
                 ServiceContainer.Resolve<IStoreStrategy>(config?.Type).Upload(stream, entity.name, out var filePath);
                 var sysImage = new sys_file()
                 {
                     sys_fileId = id,
                     name = entity.name,
                     real_name = entity.name,
                     hash_code = hash_code,
                     file_type = "wechat_material",
                     content_type = contentType,
                     objectId = entity.Id
                 };
                 new SysFileService(context.Broker).CreateData(sysImage);
                 entity.sys_fileid = id;
                 entity.local_url = SysFileService.GetDownloadUrl(id);
             }
             break;
         case EntityAction.PreDelete:
             WeChatApi.DeleteMaterial(entity.GetAttributeValue<string>("media_id"));
             context.Broker.Delete("sys_file", entity.GetAttributeValue<string>("sys_fileid"));
             break;
         default:
             break;
     }
 }