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
}
}