`
chenqingwei
  • 浏览: 33292 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

.Net 图片上传的一个类库的源码

    博客分类:
  • NET
阅读更多
上传图片到服务器上是网站开发中很常用的功能,它的实现也很简单,可以新建一个上传类UpLoadAndSaveImage,这个类中包含三个函数UpLoadAndSave,CreateFilePath,SaveToServer。使用时调用下面的UpLoadAndSave函数就可以了,该函数第一个参数为要上传的图片数据,第二个参数为上传的虚拟路径(相对路径),第三个参数为上传图片的格式,第四个参数为上传的物理路径。在这个函数中调用CreateFilePath函数产生随机的图片名称,最后再调用SaveToServer保存图片到服务器上。
public string UpLoadAndSave(byte[] data,refstring virPath,string fext,string physicPath) 
{
// 返回文件物理地址,修改虚拟地址 
if(data==null||virPath==null||fext==null||physicPath=="") 
{ 
throw new Exception(" 非法参数" ); 
} 
string rtnValue=SaveToServer(data,fext,physicPath,data.Length); 
virPath += rtnValue; 
physicPath+=rtnValue; 
return physicPath; 
} 
private string CreateFilePath(string fext) 
{ 
string filePath=""; 
Random rd=new Random(); 
filePath+=DateTime.Now.Year.ToString("0000"); 
filePath+=DateTime.Now.Month.ToString("00"); 
filePath+=DateTime.Now.Date.ToString("00"); 
filePath+=DateTime.Now.Hour.ToString("00"); 
filePath+=DateTime.Now.Minute.ToString("00"); 
filePath+=DateTime.Now.Second.ToString("00"); 
filePath+=DateTime.Now.Millisecond.ToString("00"); 
filePath+=rd.Next(99).ToString("00"); 
filePath+="."+fext; 
return filePath; 
} 
private string SaveToServer(byte[] data,string fext,string physicPath,int fileLen) 
{ 
string filePath=CreateFilePath(fext); 
string rtnValue=filePath; 
filePath=filePath.Insert(0,@physicPath); 
if(File.Exists(filePath)) 
{ 
filePath=CreateFilePath(fext); 
rtnValue=filePath; 
} 
FileStream fs=new FileStream(filePath,FileMode.CreateNew); 
fs.Write(data,0,fileLen); 
fs.Close(); 
return rtnValue; 
} 

//在其他页面调用该上传类,见下面的实例:
UpLoadAndSaveImage upload=new UpLoadAndSaveImage(); 
try 
{ 
string virPath="UploadFiles/"; 
string physicPath=Server.MapPath(Request.ApplicationPath+"/"+"UploadFiles/"); 
string fext=this.File1.PostedFile.FileName; 
if(fext.Length==0) 
{ 
return; 
} 

fext=Path.GetExtension(fext).ToLower(); 
if(fext!=".jpg"&&fext!=".gif"&&fext!=".bmp"&&fext!=".doc"&&fext!=".rar"&&fext!=".zip"&&fext!=".jpeg") 
{ 
Response.Write("<script>alert('Invalid file format,the file format must be jpg or jpeg or gif 
or bmp or doc or rar or zip')</script>"); 
return; 
} 

byte[] data=newbyte[this.File1.PostedFile.ContentLength]; 

this.File1.PostedFile.InputStream.Read(data,0,this.File1.PostedFile.ContentLength); 

physicPath=upload.UpLoadAndSave(data,ref virPath,fext,physicPath); 

url=virPath; 

if(Session["PhotoUrl"]==null) 
{ 
ArrayList al=new ArrayList(); 
al.Add(physicPath); 
Session["PhotoUrl"]=al; 
} 
else 
{ 
ArrayList al2=(ArrayList)Session["PhotoUrl"]; 

al2.Add(physicPath); 

Session["PhotoUrl"]=al2; 
} 
} 
catch(Exception ex) 
{ 
Response.Write("<script>alert('"+ex.Message+"');</script>"); 
} 

// 如果要指定上传图片的大小,可以在调用该上传类前生成,见下面的实例:

try 
{ 
empPic = new Bitmap(File1.PostedFile.InputStream); 
} 
catch 
{ 
Script.Alert(" 图片格式错误!" ); 
return false; 
} 
Bitmap picSmall = new Bitmap(empPic,227,91); // 生成图片大小 
MemoryStream stream = new MemoryStream(); 

picSmall.Save(stream,ImageFormat.Jpeg); 
byte[] byteArray = stream.ToArray(); 
PathName1="Photo/"; 
PathName=Server.MapPath(Request.ApplicationPath+"/Photo/"); 
UpLoadAndSaveImage upimage=new UpLoadAndSaveImage(); 
PathName=upimage.UpLoadAndSave(byteArray,ref PathName1,".jpg",PathName); 

以下是我曾经写的图片上传类,带水印功能:

//生成缩略图功能。 
using System;
using System.IO;
using System.Web;
using System.Web.UI.HtmlControls;
using System.Drawing;
namespace MyUplod
{
    /// <summary> 
    /// 非寒上传类(图片)。 作者:非寒.功能:上传文件操作(主要用于图片上传);
    /// </summary> 
    public class Upload
    {
        private int _Error = 0;//返回上传状态。 
        private int _MaxSize = 5120000;//最大单个上传文件 (默认)
        private string _FileType = "jpg/gif/bmp/png";//所支持的上传类型用"/"隔开 
        private string _SavePath = System.Web.HttpContext.Current.Server.MapPath(".") + "\\";//保存文件的实际路径 
        private int _SaveType = 0;//上传文件的类型,0代表自动生成文件名 
        private HtmlInputFile _FormFile;//上传控件。 
        private string _InFileName = "";//非自动生成文件名设置。 
        private string _OutFileName = "";//输出文件名。 
        private bool _IsCreateImg = true;//是否生成缩略图。 
        private bool _Iss = false;//是否有缩略图生成.
        private int _Height = 0;//获取上传图片的高度 
        private int _Width = 0;//获取上传图片的宽度 
        private int _sHeight = 120;//设置生成缩略图的高度 
        private int _sWidth = 120;//设置生成缩略图的宽度
        private bool _IsDraw = false;//设置是否加水印
        private int _DrawStyle = 0;//设置加水印的方式0:文字水印模式,1:图片水印模式,2:不加
        private int _DrawString_x = 10;//绘制文本的X坐标(左上角)
        private int _DrawString_y = 10;//绘制文本的Y坐标(左上角)
        private string _AddText = "杭州五维多媒体\nHTTP://WWW.5D.CN";//设置水印内容
        private string _Font = "宋体";//设置水印字体
        private int _FontSize = 12;//设置水印字大小
        private int _FileSize = 0;//获取已经上传文件的大小
        private string _CopyIamgePath = System.Web.HttpContext.Current.Server.MapPath(".") + "/images/5dm_new.jpg";//图片水印模式下的覆盖图片的实际地址
        
        /// <summary>
        /// Error返回值,1、没有上传的文件。2、类型不允许。3、大小超限。4、未知错误。0、上传成功。 
        /// </summary>
        public int Error
        {
            get { return _Error; }
        }
        /// <summary>
        /// 最大单个上传文件
        /// </summary>
        public int MaxSize
        {
            set { _MaxSize = value; }
        }
        /// <summary>
        /// 所支持的上传类型用"/"隔开 
        /// </summary>
        public string FileType
        {
            set { _FileType = value; }
        }
        /// <summary>
        /// //保存文件的实际路径 
        /// </summary>
        public string SavePath
        {
            set { _SavePath = System.Web.HttpContext.Current.Server.MapPath(value); }
            get {return _SavePath;}
        }
        /// <summary>
        /// 上传文件的类型,0代表自动生成文件名
        /// </summary>
        public int SaveType
        {
            set { _SaveType = value; }
        }
        /// <summary>
        /// 上传控件
        /// </summary>
        public HtmlInputFile FormFile
        {
            set { _FormFile = value; }
        }
        /// <summary>
        /// //非自动生成文件名设置。
        /// </summary>
        public string InFileName
        {
            set { _InFileName = value; }
        }
        /// <summary>
        /// 输出文件名
        /// </summary>
        public string OutFileName
        {
            get { return _OutFileName; }
            set { _OutFileName = value; }
        }
        /// <summary>
        /// 是否有缩略图生成.
        /// </summary>
        public bool Iss
        {
            get { return _Iss; }
        }
        /// <summary>
        /// //获取上传图片的宽度
        /// </summary>
        public int Width
        {
            get { return _Width; }
        }
        /// <summary>
        /// //获取上传图片的高度
        /// </summary>
        public int Height
        {
            get { return _Height; }
        }
        /// <summary>
        /// 设置缩略图的宽度
        /// </summary>
        public int sWidth
        {
            get { return _sWidth; }
            set { _sWidth = value; }
        }
        /// <summary>
        /// 设置缩略图的高度
        /// </summary>
        public int sHeight
        {
            get { return _sHeight; }
            set { _sHeight = value; }
        }
        /// <summary>
        /// 是否生成缩略图
        /// </summary>
        public bool IsCreateImg
        {
            get { return _IsCreateImg; }
            set { _IsCreateImg = value; }
        }
        /// <summary>
        /// 是否加水印
        /// </summary>
        public bool IsDraw
        {
            get { return _IsDraw; }
            set { _IsDraw = value; }
        }
        /// <summary>
        /// 设置加水印的方式0:文字水印模式,1:图片水印模式,2:不加
        /// </summary>
        public int DrawStyle
        {
            get { return _DrawStyle; }
            set { _DrawStyle = value; }
        }
        /// <summary>
        /// 绘制文本的X坐标(左上角)
        /// </summary>
        public int DrawString_x
        {
            get { return _DrawString_x; }
            set { _DrawString_x = value; }
        }
        /// <summary>
        /// 绘制文本的Y坐标(左上角)
        /// </summary>
        public int DrawString_y
        {
            get { return _DrawString_y; }
            set { _DrawString_y = value; }
        }
        /// <summary>
        /// 设置文字水印内容
        /// </summary>
        public string AddText
        {
            get { return _AddText; }
            set { _AddText = value; }
        }
        /// <summary>
        /// 设置文字水印字体
        /// </summary>
        public string Font
        {
            get { return _Font; }
            set { _Font = value; }
        }
        /// <summary>
        /// 设置文字水印字的大小
        /// </summary>
        public int FontSize
        {
            get { return _FontSize; }
            set { _FontSize = value; }
        }
        public int FileSize
        {
            get { return _FileSize; }
            set { _FileSize = value; }
        }
        /// <summary>
        /// 图片水印模式下的覆盖图片的实际地址
        /// </summary>
        public string CopyIamgePath
        {
            set { _CopyIamgePath = System.Web.HttpContext.Current.Server.MapPath(value); }
        }
        
        //获取文件的后缀名 
        private string GetExt(string path)
        {
            return Path.GetExtension(path);
        }
        //获取输出文件的文件名。 
        private string FileName(string Ext)
        {
            if (_SaveType == 0 || _InFileName.Trim() == "")
                return DateTime.Now.ToString("yyyyMMddHHmmssfff") + Ext;
            else
                return _InFileName;
        }
        //检查上传的文件的类型,是否允许上传。 
        private bool IsUpload(string Ext)
        {
            Ext = Ext.Replace(".", "");
            bool b = false;
            string[] arrFileType = _FileType.Split(';');
            foreach (string str in arrFileType)
            {
                if (str.ToLower() == Ext.ToLower())
                {
                    b = true;
                    break;
                }
            }
            return b;
        }
        //上传主要部分。 
        public void Open()
        {
            HttpPostedFile hpFile = _FormFile.PostedFile;
            if (hpFile == null || hpFile.FileName.Trim() == "")
            {
                _Error = 1;
                return;
            }

            string Ext = GetExt(hpFile.FileName);
            if (!IsUpload(Ext))
            {
                _Error = 2;
                return;
            }

            int iLen = hpFile.ContentLength;
            if (iLen > _MaxSize)
            {
                _Error = 3;
                return;
            }

            try
            {
               
                    if (!Directory.Exists(_SavePath))
                        Directory.CreateDirectory(_SavePath);
                    byte[] bData = new byte[iLen];
                    hpFile.InputStream.Read(bData, 0, iLen);
                    string FName;
                    FName = FileName(Ext);
                    string TempFile = "";
                    if (_IsDraw)
                    {
                        TempFile=FName.Split('.').GetValue(0).ToString() + "_temp." + FName.Split('.').GetValue(1).ToString();
                    }
                    else
                    {
                        TempFile = FName; 
                    }
                    FileStream newFile = new FileStream(_SavePath + TempFile, FileMode.Create);
                    newFile.Write(bData, 0, bData.Length);
                    newFile.Flush();
                    int _FileSizeTemp = hpFile.ContentLength;
                    
                    if (_IsDraw)
                    {
                        if (_DrawStyle == 0)
                        {
                            System.Drawing.Image Img1 = System.Drawing.Image.FromStream(newFile);
                            Graphics g = Graphics.FromImage(Img1);
                            g.DrawImage(Img1, 100, 100, Img1.Width, Img1.Height);
                            Font f = new Font(_Font, _FontSize);
                            Brush b = new SolidBrush(Color.Red);
                            string addtext = _AddText;
                            g.DrawString(addtext, f, b, _DrawString_x, _DrawString_y);
                            g.Dispose();
                            Img1.Save(_SavePath + FName);
                            Img1.Dispose();


                        }
                        else
                        {
                            System.Drawing.Image image = System.Drawing.Image.FromStream(newFile);
                            System.Drawing.Image copyImage = System.Drawing.Image.FromFile(_CopyIamgePath);
                            Graphics g = Graphics.FromImage(image);
                            g.DrawImage(copyImage, new Rectangle(image.Width - copyImage.Width - 5, image.Height - copyImage.Height - 5, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
                            g.Dispose();
                            image.Save(_SavePath + FName);
                            image.Dispose();
                        }
                    }

                try
                {
                    //获取图片的高度和宽度
                    System.Drawing.Image Img = System.Drawing.Image.FromStream(newFile);
                    _Width = Img.Width;
                    _Height = Img.Height;
                    //生成缩略图部分 
                    if (_IsCreateImg)
                    {
                        //如果上传文件小于15k,则不生成缩略图。 
                        if (iLen > 15360)
                        {

                            System.Drawing.Image newImg = Img.GetThumbnailImage(_sWidth, _sHeight, null, System.IntPtr.Zero);
                            newImg.Save(_SavePath + FName.Split('.').GetValue(0).ToString() + "_s." + FName.Split('.').GetValue(1).ToString());
                            newImg.Dispose();
                            _Iss = true;
                        }
                    }
                    if (_IsDraw)
                    {
                        if (File.Exists(_SavePath + FName.Split('.').GetValue(0).ToString() + "_temp." + FName.Split('.').GetValue(1).ToString()))
                        {
                            newFile.Dispose();
                            File.Delete(_SavePath + FName.Split('.').GetValue(0).ToString() + "_temp." + FName.Split('.').GetValue(1).ToString());
                        }
                    }
                }
                catch { }
                newFile.Close();
                newFile.Dispose();
                _OutFileName = FName;
                _FileSize = _FileSizeTemp;
                _Error = 0;
                return;
            }
            catch
            {
                _Error = 4;
                return;
            }
        }
    }
}


分享到:
评论

相关推荐

    .net图片格式转换源码

    总结来说,.NET图片格式转换源码是一个基础的Web应用程序示例,涵盖了文件上传、图片处理和删除的核心功能,适合初学者了解.NET平台上的图像操作。通过学习这个源码,开发者可以进一步掌握ASP.NET Web Forms开发、...

    .net简单相册源码

    .NET简单相册源码是一个基于Microsoft的.NET框架开发的简易照片管理应用,旨在提供一个基本的图片展示和管理功能。这个项目对于初学者或者需要快速搭建一个基础相册功能的人来说非常有帮助,因为它展示了如何使用...

    梦凌.NET图片管理系统(全源码提供)

    2. **.NET Framework**:梦凌.NET图片管理系统运行在.NET Framework之上,这是一个由微软提供的开发和运行应用程序的平台。它包含了用于构建、部署和运行应用程序的各种组件和服务,如Common Language Runtime (CLR)...

    基于ASP.net的企业文件管理系统源码.zip

    【标题】"基于ASP.NET的企业文件管理系统源码"是一个典型的Web应用程序项目,旨在为企业提供一个高效、安全的文件存储和管理平台。这个系统利用ASP.NET技术,结合C#编程语言,构建了一个完整的文件管理解决方案。 ...

    一款基于JavaScript实现的多附件上传表单添加类库源码及例子程序

    本资源提供了一款基于JavaScript实现的多附件上传表单添加类库的源码和示例程序,这对于开发者来说是一个很好的学习和实践工具。 首先,让我们深入理解JavaScript在多附件上传中的作用。JavaScript是一种客户端脚本...

    C#实用网络开发类库(源码)

    "C#实用网络开发类库(源码)"是一个专门针对C#程序员设计的资源,包含了多种通用网络协议的实现,如SIP、RTP以及FTP等。下面我们将详细探讨这些协议以及如何利用C#进行网络编程。 首先,SIP(Session Initiation ...

    c# magick.Net-7.4.3.0源码 source

    总之,Magick.NET-7.4.3.0源码是一份宝贵的资源,它不仅提供了丰富的图像处理功能,而且是深入理解C#与底层库交互的实例,对于.NET开发者来说,这是一个不容错过的学习材料。通过深入研究,开发者可以在自己的项目中...

    50个VB.NET初学者参考实例源码.rar

    本资料"50个VB.NET初学者参考实例源码.rar"就是为此目的而准备的,它包含了50个精心设计的实例,旨在帮助新手快速上手。 首先,VB.NET的核心概念包括变量、数据类型、控制结构(如条件语句和循环)、函数与过程、类...

    VS.net 魔方OA源码

    【标题】"VS.NET 魔方OA源码"是一个基于.NET框架的开源办公自动化系统(OA)的源代码集合,适用于Visual Studio开发环境。这个项目对于初学者来说是一个很好的学习资源,因为它提供了实际的代码示例,展示了如何构建...

    Asp.net生成二维码和解析二维码源码20140422

    Asp.net生成二维码和解析二维码源码 ...用户通过上传图像然后调用.net类库自带的QRCodeDecoder类的decode方法进行解析二维码 用户可以根据输入的内容生成二维码,也可以根据上传的二维码图解析出对应的内容。

    .net完整版本OA办公管理系统源码

    .NET OA办公管理系统源码是基于C#编程语言开发的一个企业级应用,主要用于实现高效、便捷的办公自动化。这个系统涵盖了日常工作中许多关键功能,旨在提高工作效率,减少纸质文档的使用,促进信息的快速流转和共享。...

    .net经典OA办公管理系统最新源码

    总结,.NET经典OA办公管理系统源码揭示了如何在.NET平台上构建一个功能完备、安全可靠的办公自动化系统。通过对源码的学习和研究,开发者不仅可以提升自身技能,还能为企业的信息化建设提供有力的技术支持。

    manzana-.NET工具类源码_ios源码

    【manzana-.NET工具类源码_ios源码】是一个专为.NET开发者设计的库,用于与Apple iPhone进行交互。这个源码集提供了一系列API,帮助开发者在.NET环境中实现对iOS设备的功能操作,如设备信息获取、数据同步、通知管理...

    .net财务管理系统完整源码-hC.rar

    首先,".NET财务管理系统完整源码-hC.rar"这个标题明确指出这是一个.NET平台下的项目,使用了C#语言进行开发。C#是微软推出的一种面向对象的编程语言,特别适合用于构建Windows平台上的应用程序,其语法简洁、类型...

    asp.net项目源码

    这个平台支持多种编程语言,如C#和VB.NET,并且使用了.NET Framework,这是一个包含类库、运行时环境和编译器的全面开发环境。 SQL(Structured Query Language)是用于管理和处理关系数据库的标准编程语言。在这个...

    ASP.NET源码——Asp.net文件在线管理系统源码.zip

    这个源码包“ASP.NET源码——Asp.net文件在线管理系统源码.zip”显然提供了一个完整的文件在线管理系统的实现,适用于学习ASP.NET开发、文件操作以及Web应用的构建。 该系统的核心功能可能包括文件的上传、下载、...

    一个基于C# 实现的Image与Byte Array进行相互转换的Class类库源码及例子程序

    本篇将详细介绍如何使用C#实现Image与Byte Array之间的转换,并基于提供的类库源码进行解析。 首先,`ImageConverter.cs` 文件很可能包含了实现这两个转换的核心代码。在这个类库中,通常会有一个名为 `...

    带进度条的ASP.NET上传 v1.0.rar

    【标题】"带进度条的ASP.NET上传 v1.0.rar"是一个压缩包,其中包含了一个实现文件上传功能的ASP.NET应用,具有实时显示上传进度条的特性。这个功能对于提高用户体验尤其有用,因为它能让用户在等待大文件上传时了解...

    ASP.NET 2.0电子商务高级编程源码

    文件名为"part1"可能表示这是一个分块的压缩包,通常大型项目或源码库会分成多个部分进行上传和下载。这部分源码可能包含项目的基础结构、公共类库、数据库脚本或者一部分功能模块的代码。 通过深入研究这些源码,...

    DotNetCodes类库源码 v1.0.zip

    DotNetCodes类库源码在.net开发中,一些常用的功能性代码,可以减少许多开发时间,而且类与类之间没有什么依赖,每个类都可以单独拿出来使用。 包含的内容有:Chart图形,FTP操作类,汉字转拼音,缓存,上传下载,...

Global site tag (gtag.js) - Google Analytics