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