Asp.Net的FileUpload类实现上传文件实例
本文实例讲述了Asp.Net的FileUpload类实现上传文件的方法。分享给大家供大家参考。
具体功能代码如下:
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Web.UI;
usingSystem.Web;
usingSystem.Web.UI.WebControls;
usingSystem.Collections;
usingSystem.Drawing;
usingSystem.Drawing.Imaging;
usingSystem.IO;
namespaceCSFramework.BLL
{
///<summary>
///支持上传的文件类型
///</summary>
publicenumUploadFileType
{
ArticleAttachment=1,
Image=2,
Video=3,
All=4
}
///<summary>
///上传文件管理类
///</summary>
publicclassCFileUpload
{
privateFileUpload_fileUpload;
privatestring_savePath;
privatestring_LastUploadedFile=string.Empty;
privatebool_AutoGenFileName=false;
privatebool_AutoGenWatermark=false;
publicstringLastUploadedFile{get{return_LastUploadedFile;}}
privatestring_Error="";
privatestringPICTURE_FILE="[.gif.png.jpeg.jpg]";
privatestringZIP_FILE="[.zip.rar]";
privatestringMUILT_MEDIA_FILE="[.mpeg.mpg.fla.wma]";
privateintIMG_MAX_WIDTH=700;//指定宽度
privateintIMG_MAX_HEIGHT=0;//未指定高度
privateintMAX_SIZE_UPLOAD=1024;//最大支持上传小于1MB的文件。
///<summary>
///构造器
///</summary>
///<paramname="fileUpload">Asp.netFileUpload对象</param>
///<paramname="savePath">保存目录,不包含文件名</param>
///<paramname="autoGenFileName">自动生成文件名</param>
publicCFileUpload(FileUploadfileUpload,stringsavePath,boolautoGenFileName,boolautoGenWatermark)
{
_savePath=savePath;
_fileUpload=fileUpload;
_AutoGenFileName=autoGenFileName;
_AutoGenWatermark=autoGenWatermark;
}
///<summary>
///构造器
///</summary>
///<paramname="fileUpload">Asp.netFileUpload对象</param>
///<paramname="savePath">保存目录,不包含文件名</param>
publicCFileUpload(FileUploadfileUpload,stringsavePath)
{
_savePath=savePath;
_fileUpload=fileUpload;
}
///<summary>
///上传RAR文件
///</summary>
publicboolUploadRARFile()
{
returnDoUpload(ZIP_FILE);
}
///<summary>
///上传视频文件
///</summary>
publicboolUploadVideo()
{
returnDoUpload(MUILT_MEDIA_FILE);
}
///<summary>
///上传图片文件
///</summary>
publicboolUploadImage()
{
returnDoUpload(PICTURE_FILE);
}
publicboolUploadImage(intmaxWidth,intmaxHeight)
{
this.IMG_MAX_WIDTH=maxWidth;
this.IMG_MAX_HEIGHT=maxHeight;
returnDoUpload(PICTURE_FILE);
}
///<summary>
///上传任何支持的文件
///</summary>
publicboolUploadAnySupported()
{
returnDoUpload(PICTURE_FILEZIP_FILEMUILT_MEDIA_FILE);
}
///<summary>
///生成新的文件名
///</summary>
privatestringGetNewFileName(stringfolder,stringfileName)
{
if(_AutoGenFileName)//自动生成32位GUID文件名
{
stringext=System.IO.Path.GetExtension(fileName);
stringnewfile=Guid.NewGuid().ToString().Replace("-","")ext;
returnfoldernewfile;
}
else
{
if(System.IO.File.Exists(folderfileName))
{
stringext=System.IO.Path.GetExtension(fileName);
stringfilebody=fileName.Replace(ext,"");
intx=1;
while(true)//如果文件存在,生成尾部带(x)的文件
{
stringnewfile=folderfilebody"("x.ToString()")"ext;
if(!System.IO.File.Exists(newfile))
returnfolderfilebody"("x.ToString()")"ext;
else
x;
}
}
else
returnfolderfileName;
}
}
///<summary>
///最大支持小于1MB的文件。
///</summary>
privateboolAllowMaxSize(intfileLength)
{
doublekb=fileLength/1024;
return(int)kb<MAX_SIZE_UPLOAD;
}
privateboolDoUpload(stringallowedExtensions)
{
try
{
boolfileOK=false;
if(!_fileUpload.HasFile)thrownewException("没有文件!");//上传控件中如果不包含文件,退出
//得到文件的后缀
stringfileExtension=System.IO.Path.GetExtension(_fileUpload.FileName).ToLower();
//看包含的文件是否是被允许的文件后缀
fileOK=allowedExtensions.IndexOf(fileExtension)>0;
if(!fileOK)thrownewException("不支持的文件格式!");
//检查上传文件大小
fileOK=AllowMaxSize(_fileUpload.FileBytes.Length);
if(!fileOK)thrownewException("图片文件不能大于"MAX_SIZE_UPLOAD.ToString()"KB!");
try
{
//文件另存在服务器指定目录下
stringsavefile=GetNewFileName(_savePath,_fileUpload.FileName);
if(IsUploadImage(fileExtension))//保存图片
{
System.Drawing.Imageoutput=CImageLibrary.FromBytes(_fileUpload.FileBytes);
//检查图片宽度/高度/大小
if(this.IMG_MAX_WIDTH!=0&&output.Width>this.IMG_MAX_WIDTH)
{
output=CImageLibrary.GetOutputSizeImage(output,this.IMG_MAX_WIDTH);
}
Bitmapbmp=newBitmap(output);
this.CreateDir(Path.GetDirectoryName(savefile));
bmp.Save(savefile,output.RawFormat);
bmp.Dispose();
output.Dispose();
if(_AutoGenWatermark)
{
WatermarkImagegenWatermark=newWatermarkImage();
genWatermark.DrawWords(savefile,AppConfig.Current.WatermarkMain,
AppConfig.Current.WatermarkDesc,float.Parse("0.2"));
}
}
else//其它任何文件
{
this.CreateDir(Path.GetDirectoryName(savefile));
_fileUpload.PostedFile.SaveAs(savefile);
}
_LastUploadedFile=savefile;
returntrue;
}
catch(Exceptionex)
{
thrownewException("上传文件时发生未知错误!"ex.Message);
}
}
catch(Exceptionex)
{
_Error=ex.Message;
returnfalse;
}
}
privatevoidCreateDir(stringdir)
{
if(Directory.Exists(dir)==false)
Directory.CreateDirectory(dir);
}
privateboolIsUploadImage(stringfileExtension)
{
boolisImage=PICTURE_FILE.IndexOf(fileExtension)>0;
returnisImage;
}
}
}
希望本文所述对大家的asp.net程序设计有所帮助。
相关文章
- ASP.NET和MSSQL高性能分页实例代码
- MySQL Error number: MY-013730; Symbol: ER_NET_WAIT_ERROR2; SQLSTATE: HY000 报错 故障修复 远程处理
- 利用Oracle.Net实现数据库互联(oracle.net)
- VB.NET和MySQL的数据库操作实战(vbmysql实例)
- NET操作MySQL数据库快速入门(.net读写mysql)
- NET技术结合MySQL实现数据库访问极致体验(.net数据库mysql)
- 使用NET来连接MySQL数据库的简单方法(.net怎么连mysql)
- NET 与 MySQL 结合能实现优雅的数据事务处理(.net MySQL事物)
- ASP.NET中文件上传下载方法集合
- JQuery运用ajax注册用户实例(后台asp.net)
- .Net平台开发实践的一些点滴总结(技术规范与实践精华)
- .net中下载文件的实例代码
- ASP.NET中下载文件的几种实例代码
- .NET创建、删除、复制文件夹及其子文件的实例方法
- .net中as和is之间的区别分析
- .Net单例模式(Singleton)
- asp.net得到本机数据库实例的两种方法代码
- asp.net读取磁盘文件、删除实例代码
- ASP.NET实现TreeView的XML数据源绑定实例代码
- des加密解密JAVA与.NET互通实例
- .net实现ping的实例代码
- .Net文本框实现内容提示的实例代码(仿Google、Baidu)
- .net的序列化与反序列化实例