using Ninject; using System; using System.IO; using System.Web; using WX.CRM.Common; using WX.CRM.DAL.Redis; using WX.CRM.IBLL.Wx; using WX.CRM.WebHelper.Infrastructure; namespace WxService { /// /// WxFileUpload2 的摘要说明 /// public class FilePath2 : IHttpHandler { private static string _shareName; private static string _isShare; private IWx_MsgKey msgkey = NinjectControllerFactory.ninjectKernel.Get(); static FilePath2() { //用户名勿比指定共享服务器的IP或名称,否则会引起1312错误 _isShare = Utility.GetSettingByKey("IsShare"); if (!string.IsNullOrEmpty(_isShare)) { _shareName = Utility.GetSettingByKey("NetUseShareName") ?? @"\\192.168.1.171\weixin"; string user = Utility.GetSettingByKey("NetUseUser") ?? @"192.168.1.171\admin"; string pwd = Utility.GetSettingByKey("NetUsePwd") ?? "read,./1"; NetUseHelper.Build(_shareName, user, pwd, string.Empty);//不指定盘符,避免引起盘符被占用的错误 } } public void ProcessRequest(HttpContext context) { try { context.Response.ContentType = "text/plain"; var msgSvrId = context.Request.Params["msgSvrId"]; var msgType = context.Request.Params["msgType"]; string keyname = "wx:" + msgSvrId; var redis = new RedisString(keyname); //存放在数据库中的路径 var filePath = redis.Get(); if (string.IsNullOrEmpty(filePath)) { filePath = msgkey.GetFile(keyname);//如果redis查找不到,就从数据库中查找一次 } //没有找到路径 if (string.IsNullOrEmpty(filePath)) { if (msgType == "3" || msgType == "47") { //byte[] buffurPic = Convert.FromBase64String("data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="); var buffurPic = Convert.FromBase64String("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg=="); context.Response.Clear(); context.Response.ContentType = "image/gif"; context.Response.BufferOutput = true; context.Response.OutputStream.Write(buffurPic, 0, buffurPic.Length); context.Response.Flush(); } return; } //存放在共享目录中的路径 var shareFilePath = _shareName + @"\WXFILE" + filePath; var fileName = Path.GetFileName(filePath); if (msgType == "3" || msgType == "47") { //图片处理 var fs = new FileStream(shareFilePath, FileMode.Open, FileAccess.Read); //var fs = new FileStream(@"\\192.168.1.171\weixin\uploadfile\20181\775b1ae28ef3c43f1a8ad02fe0cfd0c0.jpg", FileMode.Open, FileAccess.Read); byte[] buffur = new byte[fs.Length]; fs.Read(buffur, 0, (int)fs.Length); string strPic = Convert.ToBase64String(buffur); byte[] buffurPic = Convert.FromBase64String(strPic); context.Response.Clear(); context.Response.ContentType = "image/jpeg"; context.Response.BufferOutput = true; context.Response.OutputStream.Write(buffurPic, 0, buffurPic.Length); context.Response.Flush(); } else if (msgType == "34") { //语音处理 var fileNameWithoutExt = Path.GetFileNameWithoutExtension(filePath); shareFilePath = _shareName + @"\WXFILE\uploadfile\audio\" + fileNameWithoutExt + ".mp3"; FileStream fs = new FileStream(shareFilePath, FileMode.Open, FileAccess.Read); byte[] buffur = new byte[fs.Length]; fs.Read(buffur, 0, (int)fs.Length); string strPic = Convert.ToBase64String(buffur); byte[] buffurPic = Convert.FromBase64String(strPic); context.Response.Clear(); context.Response.ContentType = "audio/mp3"; context.Response.BufferOutput = true; context.Response.OutputStream.Write(buffurPic, 0, buffurPic.Length); context.Response.Flush(); } else if (msgType == "43" || msgType == "49") { //视频、办公文件,直接下载 byte[] buffurPic = File.ReadAllBytes(shareFilePath); context.Response.Clear(); context.Response.ContentType = "application/octet-stream"; context.Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName + ";"); context.Response.BufferOutput = true; context.Response.OutputStream.Write(buffurPic, 0, buffurPic.Length); context.Response.Flush(); } HttpContext.Current.Response.Write(string.Empty); } catch (Exception ex) { LogHelper.Error(ex.ToString()); HttpContext.Current.Response.Write(string.Empty); } } public bool IsReusable { get { return false; } } } }