- 浏览: 32268 次
- 性别:
- 来自: 北京
最新评论
上传图片到服务器上是网站开发中很常用的功能,它的实现也很简单,可以新建一个上传类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; } } } }
发表评论
-
动态生成WORD内容
2009-09-15 14:12 940//动态生成WORD内容 St ... -
页面静态化
2009-09-03 10:25 12441替代法 1.1引用地址 http://www.cnbl ... -
面试
2009-08-18 13:09 22591.简述 private、 protected、 public ... -
批量写数据---将XML数据批量写入数据库
2009-08-18 13:06 1846将数据批量写入数据库的需求是比较多的,方法也有很多种,在.ne ... -
更改 Visual Studio 中用户界面文本所使用的语言
2009-08-06 21:26 1669在“工具”菜单中单击“选项”。 在“选项”对话框中展开“环境 ... -
Visual Studio 2005 图像库
2009-08-06 21:22 1099Visual Studio 2005 图像库是 ... -
SSO与用户登录问题容易混淆
2009-08-01 13:02 905单点登陆(SSO),多个系统一次登陆权限均配, 彼此 ... -
.NET设计模式开篇
2009-07-03 23:58 797这几天在看设计模式方面的书,所以记录一下. 1.设计模式是规则 ... -
NET安装模板
2009-06-02 19:52 754菜单->Tools->option->pro ... -
在InstallShield中手动修改XML Files Changes
2009-05-10 13:43 1773最近在忙于打包安装程序,使用的是InstallShield 1 ... -
Visual Studio小技巧:复制代码时,保留原ID
2009-05-10 13:40 1087在我们开发过程中,经常会复制一些代码,而Visual Stud ... -
C#操作数据库备份和还原
2009-04-28 11:11 2352C#实现SQLSERVER2000数据库备份还原的两种方法 ... -
FreeTextBox 1.6.3 (中文版)在新闻发布、博客写作、论坛社区等多种 Web 系统中都
2009-03-29 16:20 2236FreeTextBox 1.6.3 (中文版) ... -
C#编写最小化时隐藏为任务栏图标的Window appllication
2009-03-29 16:14 22991.设置窗体属性showinTask=false 2.加no ... -
WEB技巧[搜集整理]
2009-03-29 16:10 682http://www.logomaker.cn 控制横向和 ... -
漂亮的 js 日历(把日期输入到文本框)
2009-03-29 16:07 1356<!DOCTYPE HTML PUBLIC &quo ... -
VS2005下为ASP.NET 2.0网站生成唯一程序集
2009-03-29 16:00 1729我的新闻管理系统http://cms.bmw.net.cn/I ... -
页面间传值的方法总结
2009-02-20 14:54 957ASP.NET提供了卓越的事件驱动编程模型,让开发者简化了应用 ... -
无法将类型“ASP.login_aspx”转换为“System.Web.UI.WebControls
2009-02-20 11:18 1411发布网站里遇到,无法将类型“ASP.login_aspx”转换 ... -
VSS使用过程中的问题
2008-12-20 11:46 969VSS客户端不能访问问题“unable to open use ...
相关推荐
Asp.net生成二维码和解析二维码源码 ...用户通过上传图像然后调用.net类库自带的QRCodeDecoder类的decode方法进行解析二维码 用户可以根据输入的内容生成二维码,也可以根据上传的二维码图解析出对应的内容。
DotNetCodes类库源码在.net开发中,一些常用的功能性代码,可以减少许多开发时间,而且类与类之间没有什么依赖,每个类都可以单独拿出来使用。 包含的内容有:Chart图形,FTP操作类,汉字转拼音,缓存,上传下载,...
167.如何解决ADO.NET访问ACCESS数据库出现“操作必须使用一个可更新的查询”的问题 168.如何从EXCEL文件中读取数据 169.如何备份和恢复数据库 第9章 ASP.NET安全策略 第10章 常用功能及函数集 180.如何在ASP...
DotNetCodes类库源码: 在.net开发中,一些常用的功能性代码,可以减少许多开发时间,而且类与类之间没有什么依赖,每个类都可以单独拿出来使用。 包含的内容有:Chart图形,FTP操作类,汉字转拼音,缓存,上传下载,...
一个很好用的VB.NET写的FTP上传下载类库,可直接拿DLL来用。
【原创】项目框架为 .net Core 3.1 MVC IOC + Oracle +EF,集成了Web端和WebAPI端,Web端已经集成文件上传、拦截器和示例代码,WebAPi集成了Log4net、跨域、文件上传和示例代码,使用者只需要编写对应的业务逻辑代码...
鼠标放在一个连接上,会显示图片(类似tooltip) 使用microsoft.web.ui.webcontrols的TabStrip与IFame组件,达到页的切换效果 HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署...
该项目博客园一个网友开源的,站长认为该项目是国内.net core 后台管理功能做的最好的开源项目!之前从dotnet core 1.1开始,升级到2.0,乃至如今2.1。 项目git仓库:https://github.com/hogenwang/comcms_core ...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
第5篇【王牌资源】在DVD光盘中赠送了丰富的资源,诸如 ASP.NET类库查询手册、ASP.NET控件查询手册、ASP.NET源码大放送、本书【练一练】答案、ASP.NET程序员职业规划、 ASP.NET程序员面试技巧、ASP.NET常见面试题、...
Asp.net多层架构,多数据库开发模式,缓存,自定义标签的详细开发步骤,Repeater控件以及AspNetPager控件的配合使用,全站生成静态页并解析自定义标签的模式,图片上传自动裁切技术。纯静态页中非ajax分页技术。 ...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
“我记录”这套源码总共包括 两个部分:一个 .net 平台下的全栈式、轻量级开发框架,包括 ORM、MVC、IOC、AOP、JSON、LOG 等,同时包括全套图文教程;用这个框架开发的 SNS 互联网产品。本产品以 SNS 为基础平台,...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...
图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...
图片到图片装载器、绘制火焰效果的X坐标,Y坐标、得到X坐标,Y坐标值、绘制火焰效果Image…… Java加密解密工具集 JCT v1.0源码包 5个目标文件 内容索引:JAVA源码,综合应用,JCT,加密解密 WDSsoft的一款免费源代码 JCT ...
5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...