图片压缩
1.调用:var result = PictureService.Upload(System.Web.HttpContext.Current.Request, 20);
2.定义:
public static FileResult Upload(HttpRequest request, int fileSize)
{
var result = new FileResult { IsError = true };
fileSize = 10 * 1024 * 1024;
//const int fileSize = 10 * 1024 * 1024;
var files = request.Files;
//定义允许上传的文件扩展名
var extType = new Hashtable
{
{"image", "gif,jpg,jpeg,png,bmp"},
{"file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2,apk"}
};
//验证文件类型,是image或者file
var dirName = request.Form["fileType"];
if (string.IsNullOrEmpty(dirName))
{
dirName = "image";
}
if (files.Count < 0)
{
result.ErrMsg = "请选择文件。";
return result;
}
else
{
for (var i = 0; i < files.Count; i++)
{
var fileName = files[i].FileName;
var fileExt = Path.GetExtension(fileName).ToLower();
if (files[i].InputStream.Length > fileSize)
{
result.ErrMsg = "上传文件大小超过限制。";
return result;
}
if (string.IsNullOrWhiteSpace(fileExt))
{
result.ErrMsg = "上传文件扩展名是不允许的扩展名。
只允许" + ((string)extType[dirName]) + "格式。";
return result;
}
var imageBytes = new byte[files[i].ContentLength];
files[i].InputStream.Read(imageBytes, 0, imageBytes.Length);
files[i].InputStream.Close();
//获取文件保存路径
var savePath = string.IsNullOrWhiteSpace(request.Form["path"]) ? "H5Default" : request.Form["path"];
switch (savePath)
{
case "H5Default":
savePath = UploadPathEnum.H5Default.ToString();
break;
case "H5Circle":
savePath = UploadPathEnum.H5Circle.ToString();
break;
case "H5Diary":
savePath = UploadPathEnum.H5Diary.ToString();
break;
case "H5Product":
savePath = UploadPathEnum.H5Product.ToString();
break;
case "H5Advert":
savePath = UploadPathEnum.H5Advert.ToString();
break;
case "News":
savePath = "News";
break;
default:
result.ErrMsg = "上传文件目录不存在。";
return result;
}
result = dirName == "image" ? UploadImg(request, imageBytes, savePath) : UploadFile(request, imageBytes, savePath);
}
}
return result;
}
3.Upload Img:
/// <summary>
/// 上传图片方法
/// </summary>
/// <param name="request">请求</param>
/// <param name="imageBytes">图片大小</param>
/// <param name="savePath">上传路径</param>
/// <returns></returns>
protected static FileResult UploadImg(HttpRequest request, byte[] imageBytes, string savePath)
{
var result = new FileResult { IsError = true };
try
{
Guid pid;
var load = UploadHelper.UpLoadImg(imageBytes, savePath, out pid);
if (!load.IsError)
{
//var flag = InsertData(request, load.Data.ToString(), pid);
result.Data = load.Data;
result.IsError = false;
}
}
catch (Exception ex)
{
result.ErrMsg = ex.Message;
}
return result;
}
4.图片缩略
public static FileResult UpLoadImg(byte[] imageByte, string direetory, out Guid pid)
{
var result = new FileResult() { IsError = true };
pid = Guid.NewGuid();
try
{
var soapClient = new AjaxImgSoapClient();
//调用服务上传图片
var filepath = string.Empty;
switch (direetory)
{
case "H5Default":
//case "H5Advert":
filepath = soapClient.UpLoadImg(imageByte, direetory, pid.ToString());
break;
case "H5Advert":
filepath = soapClient.UpLoadImgSaveThumbnail(imageByte, direetory, false, false);
break;
default:
filepath = soapClient.UpLoadImgSaveThumbnail(imageByte, direetory, true, true);
break;
}
if (string.IsNullOrWhiteSpace(filepath))
{
result.ErrMsg = "上传图片失败!";
return result;
}
else
{
result.Data = filepath;
}
result.IsError = false;
}
catch (Exception ex)
{
result.ErrMsg = ex.Message;
}
return result;
}
5 解析:
pics = base.GetThumbnailPicture(pics, Thumbnail.FourHundred);
/// <summary>
/// 获取新的缩略图图片路径【路径例子:http://files.meb.com//Pictures/H5/Product/20150828112321116.jpg】
/// </summary>
/// <param name="sourceImagePath">原图片路径</param>
/// <param name="thumbnail">需要生成的图片缩略图大小</param>
/// <param name="outSourceImagePath">图片原路径[如果此图片路径处理不正确,这里会进行相应处理,并返回]</param>
/// <returns></returns>
public string GetThumbnailPicture(string sourceImagePath, Thumbnail thumbnail)
{
if (sourceImagePath == null)
{
return string.Empty;
}
//return ImageSite.TrimEnd('/') + "/" + sourceImagePath.Replace(ImageSite, string.Empty).Replace(FilesDomain, string.Empty).TrimStart('/');
if (!sourceImagePath.ToUpper().Contains("NEWS") && !sourceImagePath.ToUpper().Contains("PRODUCT"))
{
return ImageSite.TrimEnd('/') + "/" + sourceImagePath.Replace(ImageSite, string.Empty).Replace(FilesDomain, string.Empty).TrimStart('/').Replace(AliImageSite, string.Empty).TrimStart('/');
}
string outSourceImagePath = sourceImagePath;
if (string.IsNullOrEmpty(sourceImagePath) || thumbnail == Thumbnail.Default) { return sourceImagePath; }
//移除全路径部分
outSourceImagePath = outSourceImagePath.Replace(ImageSite, string.Empty).Replace(FilesDomain, string.Empty).Replace(AliImageSite, string.Empty).TrimStart('/');
//获取最后级目录索引
int lastDictionaryIndex = outSourceImagePath.LastIndexOf("/");
//文件名
string headDictionary = string.Empty;
string fileName = string.Empty;
string thumbnailDictionary = string.Empty;
if (lastDictionaryIndex > -1)
{
headDictionary = outSourceImagePath.Substring(0, lastDictionaryIndex);
fileName = outSourceImagePath.Substring(lastDictionaryIndex);
}
if (thumbnail == Thumbnail.FourHundred)
{
thumbnailDictionary = "400_400";
}
if (thumbnail == Thumbnail.SixHundred)
{
thumbnailDictionary = "600_600";
}
if (thumbnail == Thumbnail.MoreThanOneThousand)
{
thumbnailDictionary = "1250_1250";
}
//如果最后一级目录包含default则替换为空,连接上目标尺寸目录。如果不存在则直接连接目标目录
if (headDictionary.ToLower().LastIndexOf("default") >= 0)
{
headDictionary = headDictionary.ToLower().Substring(0, headDictionary.ToLower().LastIndexOf("default"));
}
//组建新路径
return ImageSite.TrimEnd('/') + "/" + headDictionary.TrimStart('/').TrimEnd('/') + "/" + thumbnailDictionary.TrimStart('/').TrimEnd('/') + "/" + fileName.TrimStart('/');
}