.NET上传控件源码[HtmlInputFileControl]
2006-10-11 14:05
489 查看
using System; using System.Web.UI.HtmlControls; using System.IO; namespace Web.Custom { /* * ---------------------------------------- * 功能: 通过HtmlInputFile控件上传文件类 * 创建: 2005-09-21 * 作者: ∮明天去要饭 * 邮箱: kgidwss@hotmail.com * --------------------------------------- */ /// <summary> /// HtmlInputFileControl 的摘要说明。 /// </summary> public class HtmlInputFileControl { #region HtmlInputFileControl public HtmlInputFileControl() { // // TODO: 在此处添加构造函数逻辑 // } #endregion #region IsAllowedExtension /// <summary> /// 是否允许该扩展名上传 /// </summary> /// <param name="hifile">HtmlInputFile控件</param> /// <returns>允许则返回true,否则返回false</returns> public static bool IsAllowedExtension(HtmlInputFile hifile) { string strOldFilePath = "",strExtension = ""; //允许上传的扩展名,可以改成从配置文件中读出 string[] arrExtension = {".gif",".jpg",".jpeg",".bmp",".png"}; if(hifile.PostedFile.FileName != string.Empty) { strOldFilePath = hifile.PostedFile.FileName; //取得上传文件的扩展名 strExtension = strOldFilePath.Substring(strOldFilePath.LastIndexOf(".")); //判断该扩展名是否合法 for(int i = 0; i< arrExtension.Length; i++) { if(strExtension.Equals(arrExtension[i])) { return true; } } } return false; } #endregion #region IsAllowedLength /// <summary> /// 判断上传文件大小是否超过最大值 /// </summary> /// <param name="hifile">HtmlInputFile控件</param> /// <returns>超过最大值返回false,否则返回true.</returns> public static bool IsAllowedLength(HtmlInputFile hifile) { //允许上传文件大小的最大值,可以保存在xml文件中,单位为KB int i = 20; //如果上传文件的大小超过最大值,返回flase,否则返回true. if(hifile.PostedFile.ContentLength > i * 1024) { return false; } return true; } #endregion #region SaveFile /// <summary> /// 上传文件并返回文件名 /// </summary> /// <param name="hifile">HtmlInputFile控件</param> /// <param name="strAbsolutePath">绝对路径.如:Server.MapPath(@"Image/upload")与Server.MapPath(@"Image/upload/")均可,用/符号亦可</param> /// <returns>返回的文件名即上传后的文件名</returns> public static string SaveFile(HtmlInputFile hifile,string strAbsolutePath) { string strOldFilePath = "",strExtension = "",strNewFileName = ""; if(hifile.PostedFile.FileName != string.Empty) { strOldFilePath = hifile.PostedFile.FileName; //取得上传文件的扩展名 strExtension = strOldFilePath.Substring(strOldFilePath.LastIndexOf(".")); //文件上传后的命名 strNewFileName = GetUniqueString() + strExtension; if(strAbsolutePath.LastIndexOf("//") == strAbsolutePath.Length) { hifile.PostedFile.SaveAs(strAbsolutePath + strNewFileName); } else { hifile.PostedFile.SaveAs(strAbsolutePath + "//" + strNewFileName); } } return strNewFileName; } #endregion #region CoverFile /// <summary> /// 重新上传文件,删除原有文件 /// </summary> /// <param name="ffFile">HtmlInputFile控件</param> /// <param name="strAbsolutePath">绝对路径.如:Server.MapPath(@"Image/upload")与Server.MapPath(@"Image/upload/")均可,用/符号亦可</param> /// <param name="strOldFileName">旧文件名</param> public static void CoverFile(HtmlInputFile ffFile,string strAbsolutePath,string strOldFileName) { //获得新文件名 string strNewFileName = GetUniqueString(); if(ffFile.PostedFile.FileName != string.Empty) { //旧图片不为空时先删除旧图片 if(strOldFileName != string.Empty) { DeleteFile(strAbsolutePath,strOldFileName); } SaveFile(ffFile,strAbsolutePath); } } #endregion #region DeleteFile /// <summary> /// 删除指定文件 /// </summary> /// <param name="strAbsolutePath">文件绝对路径</param> /// <param name="strFileName">文件名</param> public static void DeleteFile(string strAbsolutePath, string strFileName) { if(strAbsolutePath.LastIndexOf("//") == strAbsolutePath.Length) { if(File.Exists(strAbsolutePath + strFileName)) { File.Delete(strAbsolutePath + strFileName); } } else { if(File.Exists(strAbsolutePath + "//" + strFileName)) { File.Delete(strAbsolutePath + "//" + strFileName); } } } #endregion #region GetUniqueString /// <summary> /// 获取一个不重复的文件名 /// </summary> /// <returns></returns> public static string GetUniqueString() { return DateTime.Now.ToString("yyyyMMddhhmmss"); } #endregion } } |
[align=left] 在开发ASP.NET项目时,经常遇到要上传文件的情况,出于安全考虑,我们不但要对上传文件的扩展名进行判断,同时还要对上传文件的大小等进行控制。如果每次遇到上传文件时都写一堆的代码,那不但浪费了时间,同时也会使程序的效率降低。于是我将上传文件写成一个类,这样以后就可以调用类的方法上传文件了。 方法1:判断文件扩展名是否合法[/align] [align=left]#regionIsAllowedExtension ///<summary> ///是否允许该扩展名上传 ///</summary> ///<paramname = hifile>HtmlInputFile控件</param> ///<returns>允许则返回true,否则返回false</returns> publicstaticboolIsAllowedExtension(HtmlInputFilehifile) { stringstrOldFilePath = ,strExtension = ; //允许上传的扩展名,可以改成从配置文件中读出 string[]arrExtension = {.gif,.jpg,.jpeg,.bmp,.png}; if(hifile.PostedFile.FileName! = string.Empty) { strOldFilePath = hifile.PostedFile.FileName; //取得上传文件的扩展名 strExtension = strOldFilePath.Substring(strOldFilePath.LastIndexOf(.)); //判断该扩展名是否合法 for(inti = 0;i<arrExtension.Length;i++) { if(strExtension.Equals(arrExtension[i])) { return true; } } } returnfalse; } #endregion[/align] [align=left] 方法2:判断上传文件大小是否超过最大值[/align] [align=left]#region IsAllowedLength /// <summary> /// 判断上传文件大小是否超过最大值 /// </summary> /// <param name=hifile>HtmlInputFile控件</param> /// <returns>超过最大值返回false,否则返回true.</returns> public static bool IsAllowedLength(HtmlInputFile hifile) { //允许上传文件大小的最大值,可以保存在xml文件中,单位为KB int i = 20; //如果上传文件的大小超过最大值,返回flase,否则返回true. if(hifile.PostedFile.ContentLength > i * 1024) { return false; } return true; } #endregion[/align] [align=left] 方法3:获得唯一的文件名 为了保证上传文件不会出现覆盖的情况,我们需要根据当前时间对文件进行重新命名,得到唯一的文件名的方法为:[/align] [align=left]#region GetUniqueString /// <summary> /// 获取一个不重复的文件名 /// </summary> /// <returns></returns> public static string GetUniqueString() { //得到的文件名形如:20050922101010 return DateTime.Now.ToString(yyyyMMddhhmmss); } #endregion[/align] [align=left] 方法4:删除文件[/align] [align=left]#region DeleteFile /// <summary> /// 删除指定文件 /// </summary> /// <param name=strAbsolutePath>文件绝对路径</param> /// <param name=strFileName>文件名</param> public static void DeleteFile(string strAbsolutePath, string strFileName) { //判断路径最后有没有/符号,没有则自动加上 if(strAbsolutePath.LastIndexOf(//) == strAbsolutePath.Length) { //判断要删除的文件是否存在 if(File.Exists(strAbsolutePath + strFileName)) { //删除文件 File.Delete(strAbsolutePath + strFileName); } } else { if(File.Exists(strAbsolutePath + // + strFileName)) { File.Delete(strAbsolutePath + // + strFileName); } } } #endregion[/align] [align=left] 方法5:上传文件 如果上传文件的扩展名和大小均合法,则将文件上传到服务器上,方法为:[/align] [align=left]#region SaveFile /// <summary> /// 上传文件并返回文件名 /// </summary> /// <param name=hifile>HtmlInputFile控件</param> /// <param name=strAbsolutePath>绝对路径.如:Server.MapPath(@Image/upload)与Server.MapPath(@Image/upload/)均可,用/符号亦可</param> /// <returns>返回的文件名即上传后的文件名</returns> public static string SaveFile(HtmlInputFile hifile,string strAbsolutePath) { string strOldFilePath = ,strExtension = ,strNewFileName = ; //如果上传文件的文件名不为空 if(hifile.PostedFile.FileName != string.Empty) { strOldFilePath = hifile.PostedFile.FileName; //取得上传文件的扩展名 strExtension = strOldFilePath.Substring(strOldFilePath.LastIndexOf(.)); //文件上传后的命名 strNewFileName = GetUniqueString() + strExtension; //如果路径末尾为/符号,则直接上传文件 if(strAbsolutePath.LastIndexOf(//) == strAbsolutePath.Length) { hifile.PostedFile.SaveAs(strAbsolutePath + strNewFileName); } else { hifile.PostedFile.SaveAs(strAbsolutePath + // + strNewFileName); } } return strNewFileName; } #endregion[/align] [align=left] 该方法将文件上传后,会返回上传文件的新文件名,以备将此新文件名插入到数据库中。 方法6:重新上传文件 重新上传文件时,首先要将原来上传过的文件删除,然后上传新文件,并用新文件名覆盖数据库中的旧文件名,这样才完成了重新上传工作,实现代码如下:[/align] [align=left]#region CoverFile /// <summary> /// 重新上传文件,删除原有文件 /// </summary> /// <param name=ffFile>HtmlInputFile控件</param> /// <param name=strAbsolutePath>绝对路径.如:Server.MapPath(@Image/upload)与Server.MapPath(@Image/upload/)均可,用/符号亦可</param> /// <param name=strOldFileName>旧文件名</param> public static void CoverFile(HtmlInputFile ffFile,string strAbsolutePath,string strOldFileName) { //获得新文件名 string strNewFileName = GetUniqueString(); if(ffFile.PostedFile.FileName != string.Empty) { //旧图片不为空时先删除旧图片 if(strOldFileName != string.Empty) { DeleteFile(strAbsolutePath,strOldFileName); } SaveFile(ffFile,strAbsolutePath); } } #endregion[/align] 通过以上6个方法,即可很方便的上传文件,同时又能对文件进行控制,是不是很方便?不过如果想上传大文件,还是建议使用专门的上传大文件控件。 |
相关文章推荐
- .NET上传控件源码[HtmlInputFileControl]
- .NET上传控件源码[HtmlInputFileControl]
- 通过HtmlInputFile控件上传文件的类
- 通过HtmlInputFile控件上传文件的类
- 通过HtmlInputFile控件上传文件的类
- 清空上传控件HtmlInputFile的方法
- HTML通过button触发input-file控件上传文件的问题
- input file控件限制上传文件类型 网页上添加一个input file HTML控件: 1 <input id="File1" type="file" /> 默认是这样的,所有文件类
- 通过HtmlInputFile控件上传文件的类
- ASP.Net之HTMLInputFile控件上传文件
- HTML上传控件input=file的美化
- 清空上传控件HtmlInputFile的方法
- 破晓之阳原创『上传图片』之HtmlInputFile控件
- 通过htmlinputfile控件上传类
- 关于Html动态添加上传文件控件inputFile(附件)及清除已选择的文件的几个方法
- 通过HtmlInputFile控件上传文件的类
- 如何通过HtmlInputFile控件上传文件的类
- [翻译]运用HtmlInputFile服务器控件上传多个文件
- 通过HtmlInputFile控件上传文件的类
- html input控件type为file上传文件、图片,及保存为原文件