public class Biz_UploadImageBase { protected moto_imgDAL dal = new moto_imgDAL(); #region MethodHelper /// <summary> /// 返回客户端错误 /// </summary> /// <param name="msg"></param> /// <returns></returns> protected dataresult return_CustomError(string msg) { return new dataresult { msg = msg, code = "-1" }; } /// <summary> /// 包装参数 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <param name="ignoreProperty"></param> /// <param name="ignoreDataProperty"></param> /// <returns></returns> public string PackagingParam<T>(T t, string ignoreProperty, string ignoreDataProperty) { string tStr = string.Empty; if (t == null) { return tStr; } System.Reflection.PropertyInfo[] properties = t.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public); if (properties.Length <= 0) { return tStr; } //按字符排序拼凑 ABCDEF.... var sortProperties = from item in properties orderby item.Name select item; foreach (System.Reflection.PropertyInfo item in sortProperties) { string name = item.Name; object value = item.GetValue(t, null); if (item.PropertyType.IsValueType || item.PropertyType.Name.StartsWith("String")) { if (value == null) continue; string strValue = value.ToString().Trim(); if (strValue != "0" && strValue != "" && !name.Equals(ignoreProperty) && !name.Equals(ignoreDataProperty)) tStr += string.Format("{0}={1}&", name, value); } else { PackagingParam(value, ignoreProperty, ignoreDataProperty); } } return tStr; } public static string Decode(string strValue) { return System.Web.HttpUtility.UrlDecode(strValue, Encoding.UTF8); } /// <summary> /// 指定长度随机数 /// </summary> /// <param name="length"></param> /// <param name="prefix">前缀</param> /// <returns></returns> public string GetRnd(int length, string prefix) { byte[] b = new byte[4]; new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b); Random r = new Random(BitConverter.ToInt32(b, 0)); string s = null, str = "0123456789"; for (int i = 0; i < length - prefix.Length; i++) { s += str.Substring(r.Next(0, str.Length - 1), 1); } s = prefix + s; return s; } #endregion #region RunRobots /// <summary> /// 验证方式 /// </summary> /// <param name="json"></param> /// <returns></returns> protected bool VerifySign(JsonUploadImageData json) { //所有非空参数 除了 @sign外其余参数按字符排序拼凑 //@sign_str = brand_name=@brand_name&c_req_type=@c_req_type ...... //判断 @sign == md5(md5(@sign_str)+@sign_key) //@sign_key 存在配置环境 //相等再继续下一步 不相等 则返回异常 string sign_str = PackagingParam(json, "sign", "image_data"); if (sign_str.Length > 0) sign_str = sign_str.Remove(sign_str.Length - 1); WriteLogHelper wlHelper = new WriteLogHelper(); wlHelper.WriteToFile("-----------------------------------------"); wlHelper.WriteToFile(string.Format("VerifySign:{0}", DateTime.Now)); wlHelper.WriteToFile(string.Format("sign_str:{0}", sign_str)); MdFiveHashingHelper mdFive = new MdFiveHashingHelper(); string midFive = mdFive.GetMD5(sign_str).ToLower(); wlHelper.WriteToFile(string.Format("midFive:{0}", midFive)); string sign = mdFive.GetMD5(midFive + ConfigHelper.sign_key); wlHelper.WriteToFile(string.Format("sign:{0}", sign)); wlHelper.WriteToFile(string.Format("json.sign:{0}", json.sign)); return sign.ToLower() == json.sign.ToLower(); } /// <summary> /// 路径生产者 /// </summary> /// <param name="json"></param> /// <param name="readFile"></param> /// <returns></returns> protected PackagingPathEntity PathGenerator(JsonUploadImageData json, string readFile = "") { // 图片存放路径 images/{@brand_name}/{@req_type}/{@c_req_type}/{YMD}/ //@c_req_type 如果为空 //则路径 images/{@brand_name}/{@req_type}/{YMD}/ PackagingPathEntity pathEntity = new PackagingPathEntity(); string ymd = DateTime.Now.ToString("yyyyMMdd"); pathEntity.RelativePath = string.IsNullOrEmpty(json.c_req_type.Trim()) ? string.Format(@"images/{0}/{1}/{2}/", json.brand_name, json.req_type, ymd) : string.Format(@"images/{0}/{1}/{2}/{3}/", json.brand_name, json.req_type, json.c_req_type.Trim(), ymd); string fileRandom = GetRnd(25, DateTime.Now.ToString("yyyyMMddHHmmssfff") + "_"); if (string.IsNullOrEmpty(readFile)) pathEntity.FileName = string.Format("{0}.{1}", fileRandom, json.suffix); else { int indexSuffix = readFile.IndexOf(".", StringComparison.Ordinal); pathEntity.FileName = fileRandom + readFile.Substring(indexSuffix); } pathEntity.UserImgFilePath = ConfigHelper.UserImg_filePath; //绝对路径 pathEntity.AbsolutePath = pathEntity.UserImgFilePath + pathEntity.RelativePath; pathEntity.AbsolutePath = pathEntity.AbsolutePath.Replace("/", @""); //全路径(包含路径与文件) pathEntity.FullPath = pathEntity.AbsolutePath + pathEntity.FileName; return pathEntity; } /// <summary> /// 保存图片到目录 /// </summary> /// <param name="pathEntity"></param> /// <param name="imageData"></param> /// <param name="pathAndName"></param> protected string SaveImageInFile(PackagingPathEntity pathEntity, byte[] imageData, string pathAndName) { try { //创建文件夹 if (!Directory.Exists(pathEntity.AbsolutePath)) { var directoryInfo = new DirectoryInfo(pathEntity.AbsolutePath); directoryInfo.Create(); } //图片唯一标示,该code在表中存在则删除原文件再创建 if (File.Exists(pathEntity.FullPath)) File.Delete(pathEntity.FullPath); //删除原来的图片 if (!string.IsNullOrEmpty(pathAndName) && File.Exists(pathEntity.UserImgFilePath + pathAndName.Replace("/", @""))) File.Delete(pathEntity.UserImgFilePath + pathAndName); using (FileStream fs = new FileStream(pathEntity.FullPath, FileMode.OpenOrCreate)) { fs.Write(imageData, 0, imageData.Length); } } catch (Exception ex) { //throw new Exception("保存图片失败!"); pathEntity.RelativePath = string.Empty; } return pathEntity.RelativePath; } /// <summary> /// 保存进库 /// </summary> /// <param name="json"></param> /// <param name="relativePath"></param> /// <param name="fileName"></param> /// <returns></returns> protected ReturnUrlPathEntity SaveInDatabase(JsonUploadImageData json, string relativePath, string fileName, string ip, string pathAndName) { //并存入对应数据表 var imgEntity = new moto_imgEntity { brand_name = json.brand_name, req_type = json.req_type, req_id = json.req_id, c_req_type = json.c_req_type, //req_ip=json.req_type, domain_name = json.domain_name, operate_name = json.operate_name, short_url = "", file_path = relativePath + fileName, img_code = json.img_code, remark = json.remark, req_ip = ip }; int executeResult = string.IsNullOrEmpty(pathAndName) ? dal.Create_moto_imgInsert(imgEntity) : dal.Create_moto_imgUpdate(imgEntity.img_code, imgEntity.file_path, pathAndName); //返回要求的实体 if (executeResult > 0) return new ReturnUrlPathEntity { file_path = imgEntity.file_path, short_url = imgEntity.short_url }; return null; } #endregion #region Abandon /// <summary> /// 读图片文件 /// </summary> /// <param name="ih"></param> /// <param name="file_path"></param> /// <returns></returns> protected List<string> LoopReadFile(string file_path) { //C#遍历指定文件夹中的所有文件 DirectoryInfo imageFolder = new DirectoryInfo(file_path); List<string> fileList = new List<string>(); //遍历文件 foreach (FileInfo info in imageFolder.GetFiles()) { //file.Extension ImageHelper.FileExtension fe = ImageHelper.CheckImageFile(info.FullName); if (fe != ImageHelper.FileExtension.VALIDFILE) fileList.Add(info.Name); } return fileList; } #endregion }