作者: ljs70924
查看: 1858|回复: 2
打印 上一主题 下一主题

[源码] 【图片上传】图片上传帮助类

[复制链接]
跳转到指定楼层
楼主
ljs70924 发表于 2015-7-16 11:44:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
查看: 1858|回复: 2
说明:
图片上传的帮助类文件,直接拿去用吧。

部分代码预览:
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Collections;
using System.Net;
using System.Text.RegularExpressions;
using System.Configuration;

//调用
//UploadImage ui = new UploadImage();
///***可选参数***/
//ui.SetWordWater = "哈哈";//文字水印
//// ui.SetPicWater = Server.MapPath("2.png");//图片水印(图片和文字都赋值图片有效)
//ui.SetPositionWater = 4;//水印图片的位置 0居中、1左上角、2右上角、3左下角、4右下角
//ui.SetSmallImgHeight = "110,40,20";//设置缩略图可以多个
//ui.SetSmallImgWidth = "100,40,20";
////保存图片生成缩略图
//var reponseMessage = ui.FileSaveAs(Request.Files[0], Server.MapPath("~/file/temp"));
////裁剪图片
//var reponseMessage2 = ui.FileCutSaveAs(Request.Files[0], Server.MapPath("~/file/temp2"), 400, 300, UploadImage.CutMode.CutNo);
///***返回信息***/
//var isError = reponseMessage.IsError;//是否异常
//var webPath = reponseMessage.WebPath;//web路径
//var filePath = reponseMessage.filePath;//物理路径
//var message = reponseMessage.Message;//错误信息
//var directory = reponseMessage.Directory;//目录
//var smallPath1 = reponseMessage.SmallPath(0);//缩略图路径1
//var smallPath2 = reponseMessage.SmallPath(1);//缩略图路径2
//var smallPath3 = reponseMessage.SmallPath(2);//缩略图路径3



/// <summary>
/// ** 描述:图片上传类、支持水印、缩略图
/// ** 创始时间:2015-5-28
/// ** 修改时间:-
/// ** 修改人:sunkaixuan
/// ** 使用说明:[url=http://www.cnblogs.com/sunkaixuan/p/4536626.html]http://www.cnblogs.com/sunkaixuan/p/4536626.html[/url]
/// </summary>
public class UploadImage
{
    #region 属性
    /// <summary>
    /// 允许图片格式
    /// </summary>
    public string SetAllowFormat { get; set; }
    /// <summary>
    /// 允许上传图片大小
    /// </summary>
    public double SetAllowSize { get; set; }
    /// <summary>
    /// 文字水印字符
    /// </summary>
    public string SetWordWater { get; set; }
    /// <summary>
    /// 图片水印
    /// </summary>
    public string SetPicWater { get; set; }
    /// <summary>
    /// 水印图片的位置 0居中、1左上角、2右上角、3左下角、4右下角
    /// </summary>
    public int SetPositionWater { get; set; }
    /// <summary>
    /// 缩略图宽度多个逗号格开(例如:200,100)
    /// </summary>
    public string SetSmallImgWidth { get; set; }
    /// <summary>
    /// 缩略图高度多个逗号格开(例如:200,100)
    /// </summary>
    public string SetSmallImgHeight { get; set; }
    /// <summary>
    /// 是否限制最大宽度,默认为true
    /// </summary>
    public bool SetLimitWidth { get; set; }
    /// <summary>
    /// 最大宽度尺寸,默认为600
    /// </summary>
    public int SetMaxWidth { get; set; }
    /// <summary>
    /// 是否剪裁图片,默认true
    /// </summary>
    public bool SetCutImage { get; set; }
    /// <summary>
    /// 限制图片最小宽度,0表示不限制
    /// </summary>
    public int SetMinWidth { get; set; }
    #endregion
    public UploadImage()
    {
        SetAllowFormat = ".jpeg|.jpg|.bmp|.gif|.png";   //允许图片格式
        SetAllowSize = 1;       //允许上传图片大小,默认为1MB
        SetPositionWater = 4;
        SetCutImage = true;
    }
    #region main method
    /// <summary>
    /// 裁剪图片
    /// </summary>
    /// <param name="PostedFile">HttpPostedFile控件</param>
    /// <param name="SavePath">保存路径【sys.config配置路径】</param>
    /// <param name="oImgWidth">图片宽度</param>
    /// <param name="oImgHeight">图片高度</param>
    /// <param name="cMode">剪切类型</param>
    /// <param name="ext">返回格式</param>
    /// <returns>返回上传信息</returns>
    public ResponseMessage FileCutSaveAs(System.Web.HttpPostedFile PostedFile, string SavePath, int oImgWidth, int oImgHeight, CutMode cMode)
    {
        ResponseMessage rm = new ResponseMessage();
        try
        {
            //获取上传文件的扩展名
            string sEx = System.IO.Path.GetExtension(PostedFile.FileName);
            if (!CheckValidExt(SetAllowFormat, sEx))
            {
                TryError(rm, 2);
                return rm;
            }
            //获取上传文件的大小
            double PostFileSize = PostedFile.ContentLength / 1024.0 / 1024.0;
            if (PostFileSize > SetAllowSize)
            {
                TryError(rm, 3);
                return rm;  //超过文件上传大小
            }
            if (!System.IO.Directory.Exists(SavePath))
            {
                System.IO.Directory.CreateDirectory(SavePath);
            }
            //重命名名称
            string NewfileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString("000");
            string fName = "s" + NewfileName + sEx;
            string fullPath = Path.Combine(SavePath, fName);
            PostedFile.SaveAs(fullPath);
            //重命名名称
            string sNewfileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString("000");
            string sFName = sNewfileName + sEx;
            rm.IsError = false;
            rm.FileName = sFName;
            string sFullPath = Path.Combine(SavePath, sFName);
            rm.filePath = sFullPath;
            rm.WebPath = "/" + sFullPath.Replace(HttpContext.Current.Server.MapPath("~/"), "").Replace("\\", "/");
            CreateSmallPhoto(fullPath, oImgWidth, oImgHeight, sFullPath, SetPicWater, SetWordWater, cMode);
            if (File.Exists(fullPath))
            {
                File.Delete(fullPath);
            }
            //压缩
            if (PostFileSize > 100)
            {
                CompressPhoto(sFullPath, 100);
            }
        }
        catch (Exception ex)
        {
            TryError(rm, ex.Message);
        }
        return rm;
    }
    /// <summary>
    /// 通用图片上传类
    /// </summary>
    /// <param name="PostedFile">HttpPostedFile控件</param>
    /// <param name="SavePath">保存路径【sys.config配置路径】</param>
    /// <param name="finame">返回文件名</param>
    /// <param name="fisize">返回文件大小</param>
    /// <returns>返回上传信息</returns>
    public ResponseMessage FileSaveAs(System.Web.HttpPostedFile PostedFile, string SavePath)
    {
        ResponseMessage rm = new ResponseMessage();
        try
        {
            if (string.IsNullOrEmpty(PostedFile.FileName))
            {
                TryError(rm, 4);
                return rm;
            }
            Random rd = new Random();
            int rdInt = rd.Next(1000, 9999);
            //重命名名称
            string NewfileName = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + DateTime.Now.Millisecond.ToString() + rdInt;
            //获取上传文件的扩展名
            string sEx = System.IO.Path.GetExtension(PostedFile.FileName);
            if (!CheckValidExt(SetAllowFormat, sEx))
            {
                TryError(rm, 2);
                return rm;
            }
            //获取上传文件的大小
            double PostFileSize = PostedFile.ContentLength / 1024.0 / 1024.0;
            if (PostFileSize > SetAllowSize)
            {
                TryError(rm, 3);
                return rm;
            }
            if (!System.IO.Directory.Exists(SavePath))
            {
                System.IO.Directory.CreateDirectory(SavePath);
            }
            rm.FileName = NewfileName + sEx;
            string fullPath = SavePath.Trim('\\') + "\\" + rm.FileName;
            rm.WebPath = "/" + fullPath.Replace(HttpContext.Current.Server.MapPath("~/"), "").Replace("\\", "/");
            rm.filePath = fullPath;
            rm.Size = PostFileSize;
            PostedFile.SaveAs(fullPath);
            System.Drawing.Bitmap bmp = new Bitmap(fullPath);
            int realWidth = bmp.Width;
            int realHeight = bmp.Height;
            bmp.Dispose();
            #region 检测图片宽度限制
            if (SetMinWidth > 0)
            {
                if (realWidth < SetMinWidth)
                {
                    TryError(rm, 7);
                    return rm;
                }
            }
            #endregion
            #region 监测图片宽度是否超过600,超过的话,自动压缩到600
            if (SetLimitWidth && realWidth > SetMaxWidth)
            {
                int mWidth = SetMaxWidth;
                int mHeight = mWidth * realHeight / realWidth;
                string tempFile = SavePath + Guid.NewGuid().ToString() + sEx;
                File.Move(fullPath, tempFile);
                CreateSmallPhoto(tempFile, mWidth, mHeight, fullPath, "", "");
                File.Delete(tempFile);
            }
            #endregion
            #region 压缩图片存储尺寸
            if (sEx.ToLower() != ".gif")
            {
                CompressPhoto(fullPath, 100);
            }
            #endregion
            //生成缩略图片高宽
            if (string.IsNullOrEmpty(SetSmallImgWidth))
            {
                rm.Message = "上传成功,无缩略图";
                return rm;
            }
            string[] oWidthArray = SetSmallImgWidth.Split(',');
            string[] oHeightArray = SetSmallImgHeight.Split(',');
            if (oWidthArray.Length != oHeightArray.Length)
            {
                TryError(rm, 6);
                return rm;
            }
            for (int i = 0; i < oWidthArray.Length; i++)
            {
                if (Convert.ToInt32(oWidthArray) <= 0 || Convert.ToInt32(oHeightArray) <= 0)
                    continue;
                string sImg = SavePath.TrimEnd('\\') + '\\' + NewfileName + "_" + i.ToString() + sEx;
                //判断图片高宽是否大于生成高宽。否则用原图
                if (realWidth > Convert.ToInt32(oWidthArray))
                {
                    if (SetCutImage)
                        CreateSmallPhoto(fullPath, Convert.ToInt32(oWidthArray), Convert.ToInt32(oHeightArray), sImg, "", "");
                    else
                        CreateSmallPhoto(fullPath, Convert.ToInt32(oWidthArray), Convert.ToInt32(oHeightArray), sImg, "", "", CutMode.CutNo);
                }
                else
                {
                    if (SetCutImage)
                        CreateSmallPhoto(fullPath, realWidth, realHeight, sImg, "", "");
                    else
                        CreateSmallPhoto(fullPath, realWidth, realHeight, sImg, "", "", CutMode.CutNo);
                }
            }
            #region 给大图添加水印
            if (!string.IsNullOrEmpty(SetPicWater))
                AttachPng(SetPicWater, fullPath);
            else if (!string.IsNullOrEmpty(SetWordWater))
                AttachText(SetWordWater, fullPath);
            #endregion
        }
        catch (Exception ex)
        {
            TryError(rm, ex.Message);
        }
        return rm;
    }
    #region 验证格式
    /// <summary>
    /// 验证格式
    /// </summary>
    /// <param name="allType">所有格式</param>
    /// <param name="chkType">被检查的格式</param>
    /// <returns>bool</returns>
    public bool CheckValidExt(string allType, string chkType)
    {
        bool flag = false;
        string[] sArray = allType.Split('|');
        foreach (string temp in sArray)
        {
            if (temp.ToLower() == chkType.ToLower())
            {
                flag = true;
                break;
            }
        }
        return flag;
    }
    #endregion
    
    //更多代码下载附件
}


类文件下载:


评分

参与人数 1金钱 +3 收起 理由
乔克斯 + 3 感谢分享,LZ辛苦了~

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 转播转播
回复 论坛版权

使用道具 举报

沙发
乔克斯 发表于 2015-7-16 14:18:31 | 只看该作者
排版已编辑。
板凳
忧郁之子 发表于 2015-7-16 22:09:29 | 只看该作者
看着不错,支持了。
您需要登录后才可以回帖 登录 | 加入CSkin博客

本版积分规则

QQ|申请友链|小黑屋|手机版|Archiver|CSkin ( 粤ICP备13070794号

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.  Designed by ARTERY.cn
GMT+8, 2024-5-4 12:16, Processed in 0.577842 second(s), 35 queries , Gzip On.

快速回复 返回顶部 返回列表