143 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			143 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using AOP.Common.DataConversion; | |||
|  | using System; | |||
|  | using System.Collections.Generic; | |||
|  | using System.IO; | |||
|  | using System.Linq; | |||
|  | using System.Text; | |||
|  | using System.Threading.Tasks; | |||
|  | using System.Web; | |||
|  | 
 | |||
|  | namespace SgManager.AI | |||
|  | { | |||
|  |     public class ImageVerification | |||
|  |     { | |||
|  |         /// <summary> | |||
|  |         /// 验证图片规格 | |||
|  |         /// </summary> | |||
|  |         /// <param name="filePath">图片路径</param> | |||
|  |         /// <param name="Msg"></param> | |||
|  |         /// <param name="defaultImageSize">默认图片最大是4MB</param> | |||
|  |         /// <param name="defaultShortLength">默认最短15px</param> | |||
|  |         /// <param name="defaultLongLength">默认最长4096px</param> | |||
|  |         /// <returns>是否验证通过</returns> | |||
|  |         public static bool VerificationImage(string filePath, out string Msg, int defaultImageSize = 1024 * 1024 * 4, int defaultShortLength = 15, int defaultLongLength = 4096) | |||
|  |         { | |||
|  |             bool isPass = true; | |||
|  |             Msg = "";//提示信息 | |||
|  | 
 | |||
|  |             string filename = System.IO.Path.GetFileName(filePath); | |||
|  | 
 | |||
|  | 
 | |||
|  |             #region 初始化验证参数 | |||
|  |             if (!File.Exists(filePath)) | |||
|  |             { | |||
|  |                 return false; | |||
|  |             } | |||
|  | 
 | |||
|  |             if (string.IsNullOrEmpty(filename)) | |||
|  |             { | |||
|  |                 Msg = "文件不能为空!"; | |||
|  |                 return false; | |||
|  |             } | |||
|  | 
 | |||
|  |             #endregion | |||
|  | 
 | |||
|  |             #region 验证是否是图片 | |||
|  |             bool isImg = false;//是否是图片标识 | |||
|  |             string[] imgTypeList = new string[] { ".jpg", ".png", "bmp" }; | |||
|  | 
 | |||
|  |             //得到文件后缀 | |||
|  |             string fileType = System.IO.Path.GetExtension(filePath); | |||
|  | 
 | |||
|  |             for (int i = 0; i < imgTypeList.Count(); i++) | |||
|  |             { | |||
|  | 
 | |||
|  |                 if (fileType.ToLower() == imgTypeList[i]) | |||
|  |                 { | |||
|  | 
 | |||
|  |                     isImg = true; | |||
|  |                 } | |||
|  |             } | |||
|  | 
 | |||
|  |             if (!isImg) | |||
|  |             { | |||
|  | 
 | |||
|  |                 Msg = "上传文件不是图片格式!请重新上传!"; | |||
|  |                 return false; | |||
|  |             } | |||
|  |             #endregion | |||
|  | 
 | |||
|  |             #region 验证图片大小 | |||
|  | 
 | |||
|  |             int imgSize = defaultImageSize; | |||
|  |             byte[] bs = File.ReadAllBytes(filePath); | |||
|  | 
 | |||
|  | 
 | |||
|  |             if (bs.Length > imgSize) | |||
|  |             { | |||
|  |                 Msg = "图片大小不能" + imgSize / 1024 / 1024 + "MB"; | |||
|  |                 return false; | |||
|  | 
 | |||
|  |             } | |||
|  |             #endregion | |||
|  | 
 | |||
|  |             #region 验证图片尺寸大小 | |||
|  | 
 | |||
|  | 
 | |||
|  |             System.Drawing.Image tempImage = System.Drawing.Image.FromFile(filePath); | |||
|  | 
 | |||
|  |             int picWidth = tempImage.Width; | |||
|  |             int picHeigth = tempImage.Height; | |||
|  | 
 | |||
|  |             if (!(defaultShortLength <= picWidth && picWidth <= defaultLongLength) && (defaultShortLength <= picHeigth && picHeigth <= defaultLongLength)) | |||
|  |             { | |||
|  | 
 | |||
|  |                 Msg = "图片尺寸规格最短边至少" + defaultShortLength + "px,最长边最大" + defaultLongLength + "px,"; | |||
|  |                 return false; | |||
|  |             } | |||
|  | 
 | |||
|  |             #endregion | |||
|  | 
 | |||
|  |             return isPass; | |||
|  | 
 | |||
|  |         } | |||
|  | 
 | |||
|  |         public static APIBaseModel<T> VerificationImage<T>(string imagePath, System.Drawing.Imaging.ImageFormat imageFormat, APIBaseModel<T> tempModel, out string errorMsg, out string strbaser64) where T : class, new() | |||
|  |         { | |||
|  |             #region 基础校验 | |||
|  |             string verificationMsg = ""; | |||
|  |             strbaser64 = ""; | |||
|  |             errorMsg = ""; | |||
|  |             bool isVerification = ImageVerification.VerificationImage(imagePath, out verificationMsg); | |||
|  |             if (!isVerification) | |||
|  |             { | |||
|  | 
 | |||
|  |                 errorMsg += verificationMsg; | |||
|  |                 tempModel.state = false; | |||
|  |                 tempModel.errorMsg = errorMsg; | |||
|  |                 return tempModel; | |||
|  |             } | |||
|  |             strbaser64 = ConvertDataFormatAndImage.ImageToByte64String(imagePath, imageFormat); // 图片的base64编码 | |||
|  |             Encoding encoding = Encoding.Default; | |||
|  |             string urlEncodeImage = HttpUtility.UrlEncode(strbaser64); | |||
|  | 
 | |||
|  |             byte[] tempBuffer = encoding.GetBytes(urlEncodeImage); | |||
|  | 
 | |||
|  |             if (tempBuffer.Length > 1024 * 1024 * 4) | |||
|  |             { | |||
|  | 
 | |||
|  |                 errorMsg += "图片加密 后的大小超过4MB!"; | |||
|  | 
 | |||
|  |                 tempModel.state = false; | |||
|  |                 tempModel.errorMsg = errorMsg; | |||
|  |                 return tempModel; | |||
|  | 
 | |||
|  |             } | |||
|  |             tempModel.state = true; | |||
|  |             return tempModel; | |||
|  |             #endregion | |||
|  |         } | |||
|  | 
 | |||
|  |     } | |||
|  | } |