.NET上传控件源码[HtmlInputFileControl]

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

 分析如下:

 在开发ASP.NET项目时,经常遇到要上传文件的情况,出于安全考虑,我们不但要对上传文件的扩展名进行判断,同时还要对上传文件的大小等进行控制。如果每次遇到上传文件时都写一堆的代码,那不但浪费了时间,同时也会使程序的效率降低。于是我将上传文件写成一个类,这样以后就可以调用类的方法上传文件了。

  方法1:判断文件扩展名是否合法
#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


  方法2:判断上传文件大小是否超过最大值
#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

  方法3:获得唯一的文件名
  为了保证上传文件不会出现覆盖的情况,我们需要根据当前时间对文件进行重新命名,得到唯一的文件名的方法为:
#region GetUniqueString
/// <summary>
///
获取一个不重复的文件名
/// </summary>
/// <returns></returns>
public static string GetUniqueString()
{
//得到的文件名形如:20050922101010
return DateTime.Now.ToString(yyyyMMddhhmmss);
}
#endregion


  方法4:删除文件
#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

  方法5:上传文件
  如果上传文件的扩展名和大小均合法,则将文件上传到服务器上,方法为:
#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

  该方法将文件上传后,会返回上传文件的新文件名,以备将此新文件名插入到数据库中。

  方法6:重新上传文件
  重新上传文件时,首先要将原来上传过的文件删除,然后上传新文件,并用新文件名覆盖数据库中的旧文件名,这样才完成了重新上传工作,实现代码如下:
#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

  通过以上6个方法,即可很方便的上传文件,同时又能对文件进行控制,是不是很方便?不过如果想上传大文件,还是建议使用专门的上传大文件控件。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值