ASP.NET实现的简单易用文件上传类
调用方法:
UploadFileuf=newUploadFile(); /*可选参数*/ uf.SetIsUseOldFileName(true);//是否使用原始文件名作为新文件的文件名(默认:true),true原始文件名,false系统生成新文件名 uf.SetFileDirectory(Server.MapPath("/file/temp3/"));//文件保存路径(默认:/upload) uf.SetFileType("*");//允许上传的文件类型,逗号分割,必须全部小写!*表示所有(默认值:.pdf,.xls,.xlsx,.doc,.docx,.txt,.png,.jpg,.gif) uf.SetIsRenameSameFile(false);//重命名同名文件? //文件以时间分目录保存 varmessage=uf.Save(Request.Files["Fileupload1"]);//“/file/temp3/2015/4/xx.jpg” //文件以编号分目录保存 varmessage2=uf.Save(Request.Files["Fileupload1"],"001"/*编号*/);//“/file/temp3/001/xx.jpg” //返回信息 varisError=message.Error;//判段是否上传成功 varwebPath=message.WebFilePath;//返回web路径 varmsg=message.Message;//返回上传信息 varfilePath=message.FilePath;//反回文件路径 varisSuccess=message.Error==false;
代码:
usingSystem; usingSystem.Collections.Generic; usingSystem.IO; usingSystem.Linq; usingSystem.Security.Cryptography; usingSystem.Text.RegularExpressions; usingSystem.Web; usingSystem.Web.Hosting; namespaceSyntacticSugar { ///<summary> ///**描述:单文件上传类(暂时不支持多文件上传) ///**创始时间:2015-5-27 ///**修改时间:- ///**作者:sunkaixuan ///</summary> publicclassUploadFile { privateParamsModelParams; publicUploadFile() { Params=newParamsModel() { FileDirectory="/upload", FileType=".pdf,.xls,.xlsx,.doc,.docx,.txt,.png,.jpg,.gif", MaxSizeM=10, PathSaveType=PathSaveType.dateTimeNow, IsRenameSameFile=true }; } ///<summary> ///文件保存路径(默认:/upload) ///</summary> publicvoidSetFileDirectory(stringfileDirectory) { if(fileDirectory==null) { thrownewArgumentNullException("fileDirectory"); } varisMapPath=Regex.IsMatch(fileDirectory,@"[a-z]\:\\",RegexOptions.IgnoreCase); if(isMapPath) { fileDirectory=GetRelativePath(fileDirectory); } Params.FileDirectory=fileDirectory; } ///<summary> ///是否使用原始文件名作为新文件的文件名(默认:true) ///</summary> ///<paramname="isUseOldFileName">true原始文件名,false系统生成新文件名</param> publicvoidSetIsUseOldFileName(boolisUseOldFileName) { Params.IsUseOldFileName=isUseOldFileName; } ///<summary> ///允许上传的文件类型,逗号分割,必须全部小写!*表示所有(默认值:.pdf,.xls,.xlsx,.doc,.docx,.txt,.png,.jpg,.gif) ///</summary> publicvoidSetFileType(stringfileType) { Params.FileType=fileType; } ///<summary> ///允许上传多少大小(单位:M) ///</summary> publicvoidSetMaxSizeM(doublemaxSizeM) { Params.MaxSizeM=maxSizeM; } ///<summary> ///重命名同名文件? ///</summary> ///<paramname="isRenameSameFile">true:重命名,false覆盖</param> publicvoidSetIsRenameSameFile(boolisRenameSameFile) { Params.IsRenameSameFile=isRenameSameFile; } ///<summary> ///保存表单文件 ///</summary> ///<paramname="postFile">HttpPostedFile</param> ///<returns></returns> publicResponseMessageSave(HttpPostedFilepostFile) { returnCommonSave(postFile); } ///<summary> ///保存表单文件,根据编号创建子文件夹 ///</summary> ///<paramname="postFile">HttpPostedFile</param> ///<paramname="number">编号</param> ///<returns></returns> publicResponseMessageSave(HttpPostedFilepostFile,stringnumber) { Params.PathSaveType=PathSaveType.code; _Number=number; returnCommonSave(postFile); } ///<summary> ///保存表单文件,根据HttpPostedFile ///</summary> ///<paramname="postFile">HttpPostedFile</param> ///<paramname="isRenameSameFile">值为true同名文件进行重命名,false覆盖原有文件</param> ///<paramname="fileName">新的文件名</param> ///<returns></returns> privateResponseMessageCommonSave(HttpPostedFilepostFile) { ResponseMessagereval=newResponseMessage(); try { if(postFile==null||postFile.ContentLength==0) { TryError(reval,"没有文件!"); returnreval; } //文件名 stringfileName=Params.IsUseOldFileName?postFile.FileName:DateTime.Now.ToString("yyyyMMddhhmmssms")+Path.GetExtension(postFile.FileName); //验证格式 this.CheckingType(reval,postFile.FileName); //验证大小 this.CheckSize(reval,postFile); if(reval.Error)returnreval; stringwebDir=string.Empty; //获取存储目录 vardirectory=this.GetDirectory(refwebDir); varfilePath=directory+fileName; if(System.IO.File.Exists(filePath)) { if(Params.IsRenameSameFile) { filePath=directory+DateTime.Now.ToString("yyyyMMddhhssms")+"-"+fileName; } else { System.IO.File.Delete(filePath); } } //保存文件 postFile.SaveAs(filePath); reval.FilePath=filePath; reval.FilePath=webDir+fileName; reval.FileName=fileName; reval.WebFilePath=webDir+fileName; returnreval; } catch(Exceptionex) { TryError(reval,ex.Message); returnreval; } } privatevoidCheckSize(ResponseMessagemessage,HttpPostedFilePostFile) { if(PostFile.ContentLength/1024.0/1024.0>Params.MaxSizeM) { TryError(message,string.Format("对不起上传文件过大,不能超过{0}M!",Params.MaxSizeM)); } } ///<summary> ///根据物理路径获取相对路径 ///</summary> ///<paramname="fileDirectory"></param> ///<paramname="sever"></param> ///<returns></returns> privatestaticstringGetRelativePath(stringfileDirectory) { varsever=HttpContext.Current.Server; fileDirectory="/"+fileDirectory.Replace(sever.MapPath("~/"),"").TrimStart('/').Replace('\\','/'); returnfileDirectory; } ///<summary> ///获取目录 ///</summary> ///<returns></returns> privatestringGetDirectory(refstringwebDir) { varsever=HttpContext.Current.Server; //存储目录 stringdirectory=Params.FileDirectory; //目录格式 stringchildDirectory=DateTime.Now.ToString("yyyy-MM/dd"); if(Params.PathSaveType==PathSaveType.code) { childDirectory=_Number; } webDir=directory.TrimEnd('/')+"/"+childDirectory+'/'; stringdir=sever.MapPath(webDir); //创建目录 if(Directory.Exists(dir)==false) Directory.CreateDirectory(dir); returndir; } ///<summary> ///验证文件类型) ///</summary> ///<paramname="fileName"></param> privatevoidCheckingType(ResponseMessagemessage,stringfileName) { if(Params.FileType!="*") { //获取允许允许上传类型列表 string[]typeList=Params.FileType.Split(','); //获取上传文件类型(小写) stringtype=Path.GetExtension(fileName).ToLowerInvariant();; //验证类型 if(typeList.Contains(type)==false) this.TryError(message,"文件类型非法!"); } } ///<summary> ///抛出错误 ///</summary> ///<paramname="Msg"></param> privatevoidTryError(ResponseMessagemessage,stringmsg) { message.Error=true; message.Message=msg; } #regionmodels privateclassParamsModel { ///<summary> ///文件保存路径 ///</summary> publicstringFileDirectory{get;set;} ///<summary> ///允许上传的文件类型,逗号分割,必须全部小写! ///</summary> publicstringFileType{get;set;} ///<summary> ///允许上传多少大小 ///</summary> publicdoubleMaxSizeM{get;set;} ///<summary> ///路径存储类型 ///</summary> publicPathSaveTypePathSaveType{get;set;} ///<summary> ///重命名同名文件? ///</summary> publicboolIsRenameSameFile{get;set;} ///<summary> ///是否使用原始文件名 ///</summary> publicboolIsUseOldFileName{get;set;} } ///<summary> ///路径存储类型 ///</summary> publicenumPathSaveType { ///<summary> ///根据时间创建存储目录 ///</summary> dateTimeNow=0, ///<summary> ///根据ID编号方式来创建存储目录 ///</summary> code=1 } privatestring_Number{get;set;} ///<summary> ///反回信息 ///</summary> publicclassResponseMessage { ///<summary> ///上传错误 ///</summary> publicboolError{get;set;} ///<summary> ///消息 ///</summary> publicstringMessage{get;set;} ///<summary> ///文件路径 ///</summary> publicstringFilePath{get;set;} ///<summary> ///网站路径 ///</summary> publicstringWebFilePath{get;set;} ///<summary> ///获取文件名 ///</summary> publicstringFileName{get;set;} } #endregion } }