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
|
||
}
|
||
|
||
}
|
||
}
|