1个完整的上传图片的类

本文介绍了一种在ASP.NET应用程序中实现文件上传和下载的方法。通过使用System.Web.UI.HtmlControls.HtmlInputFile处理文件上传,同时提供了限制文件大小和类型的选项。此外,还详细介绍了如何从服务器端下载文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System; using System.IO; using System.Web.UI;

namespace GirlsSoft.FileUpLoad {  //System.Web.UI.HtmlControls.HtmlInputFile 它不能上传4MB以上的文件  //当你选择了一个4Mb以上的文件,  //再做其它操作时会出现该页无法显示的提示  //像无效链接一样

 //解决方法:在web.config中可以配置上传文件的最大值  //下面将maxRequestLength的值设为允许的上传文件最大值(kb)  //When the upload time is over about 30/40 mins the page containing the upload form causes the session to expire even though //the file has uploaded.  //This is my web.config settings:  //  <configuration>  //  <system.web>  //<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />   //  </system.web>  //  </configuration>  //上面的解决方法并没有从根本上解决问题,因为  //上传的文件大小只要大于maxRequestLength值一样会出现上面的问题

 //还要更改窗体的属性,如:  //<form method="post" enctype="multipart/form-data" runat="server">  //</form>

 #region 上传文件的处理  /// <summary>  /// 上传文件的处理,此类不对上传文件中遇到任何的错误进行任何处理  /// </summary>  public class UpFile  {   /// <summary>   /// 选择要上传的文件,构造函数   /// </summary>   public UpFile( System.Web.UI.HtmlControls.HtmlInputFile upfile )   {    InputFile = upfile;   }

  //要上传的文件   private System.Web.UI.HtmlControls.HtmlInputFile m_InputFile;   /// <summary>   /// 要上传文件   /// </summary>   private System.Web.UI.HtmlControls.HtmlInputFile InputFile   {    get    {     return m_InputFile;    }    set    {     m_InputFile = value;    }   }

  /// <summary>   /// 得到上传文件的大小   /// </summary>   public int GetUpFileSize()   {    return InputFile.PostedFile.ContentLength;   }      /// <summary>   /// 得到上传文件的名称( 例如:1.txt, temp.doc, girl.gif )   /// </summary>   public string GetUpFileName()   {      string fullPathFileName = InputFile.PostedFile.FileName;       return fullPathFileName.Substring(fullPathFileName.LastIndexOf( @"/" )+ 1);   }   /// <summary>   /// 得到上传文件的类型( 例如:.jpg, .bmp, .doc )   /// </summary>   public string GetUpFileType()   {     string fileName = GetUpFileName();    int iPos = fileName.LastIndexOf(".");    if (iPos<0) return string.Empty;    return fileName.Substring(iPos);   }   /// <summary>   /// 得到上传文件文件的内容   /// </summary>   public byte[] GetUpFileBuffer()   {    int fileSize = GetUpFileSize();    byte[] fileBuffer = new byte[fileSize];         Stream FileStream = InputFile.PostedFile.InputStream;    FileStream.Read(fileBuffer, 0, fileSize);    return fileBuffer;   }    }    #endregion

 #region 下载文件的处理

 /// <summary>  /// 下载文件的处理  /// </summary>  public class DownFile  {     #region 创建类时的参数

  /// <summary>   /// 要处理的文件流时   /// </summary>   public DownFile( string downFileDirectory, string fileName )   {    DownFileDirectory = downFileDirectory;    FileName = fileName;   }

  #endregion

  #region 私有成员      private string m_DownFileDirectory;//要下载的文件的目录   private string m_FileName;//要下载的文件完整路径

  #endregion

  #region 属性

  /// <summary>   /// 要下载的文件的目录   /// </summary>   public string DownFileDirectory   {    get    {     return m_DownFileDirectory;    }    set    {     m_DownFileDirectory = GetDownFileDirectory(value);    }   }   /// <summary>   /// 要下载的文件完整路径   /// </summary>   public string FileName   {    get    {     return m_FileName;    }    set    {     m_FileName = m_DownFileDirectory + value;    }   }

  #endregion

  #region 下载文件的处理

  /// <summary>   ///得到下载文件的服务器完整路径   /// </summary>     private string GetDownFileDirectory( string downFileDirectory )   {    System.Web.UI.Page p = new Page();       string dFileDirectory = p.Server.MapPath( downFileDirectory );    if(!Directory.Exists( dFileDirectory ))       {     Directory.CreateDirectory( dFileDirectory );    }       return dFileDirectory;   }   /// <summary>   ///设置文件的属性   ///"Normal"   ///"ReadOnly"   ///"ReadOnly, Archive"   ///"Archive"   /// </summary>    public void FileSetAttributes(System.IO.FileAttributes fileAttributes)   {     File.SetAttributes(FileName, fileAttributes);   }   /// <summary>   /// 读文件   /// </summary>    public FileStream ReadFile()   {     return File.OpenRead(m_FileName);   }   /// <summary>   /// 写文件,要保证文件是可写   /// </summary>    public void WriteFile( byte[] fileContent )   {    FileStream FStream = new FileStream(m_FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);    BinaryWriter BWriter = new BinaryWriter(FStream);    BWriter.Write(fileContent);    BWriter.Flush();    BWriter.Close();    FStream.Close();   }   

  #endregion  }

 #endregion

 #region 文件上传下载

 /// <summary>  /// 文件上传下载  /// </summary>  public class UpLoadFile  {     #region 创建类

  /// <summary>   /// 文件上传   /// </summary>   public UpLoadFile()   {    m_FileName = string.Empty;    m_FileSize = 0;    m_FileBuffer = new byte[0];    m_FileType = string.Empty;   }   /// <summary>   /// 文件下载 fileDirectory @"/UpLoadDB/UpLoadFile/";   /// fileName : a.txt, b.doc, c.gif;   /// </summary>   public UpLoadFile(string fileDirectory, string fileName, long fileSize, byte[] fileBuffer )     {       m_FileName = fileName;    m_FileSize = fileSize;    m_FileBuffer = fileBuffer;    m_FileType = GetFileType();//要放在m_FileName = fileName之后    m_FileDirectory = fileDirectory;   }

  #endregion  

  #region 私有成员      private string m_FileDirectory;//文件存放的位置   private string m_FileName;//文件的名称   private long m_FileSize; //文件的大小   private string m_FileType;//文件的类型   private byte[] m_FileBuffer;//将文件保存到缓存,即文件的内容

  #endregion

  #region 属性      /// <summary>   /// 文件存放的位置   /// </summary>   public string FileDirectory   {    get    {     return m_FileDirectory;    }   }   /// <summary>   /// 文件的名称   /// </summary>   public string FileName   {    get    {     return m_FileName;    }   }   /// <summary>   /// 文件的大小   /// </summary>   public long FileSize   {    get    {     return m_FileSize;    }   }   /// <summary>   /// 文件的类型   /// </summary>   public string FileType   {    get    {     return m_FileType;    }   }   /// <summary>   /// 将文件保存到缓存,即文件的内容   /// </summary>   public byte[] FileBuffer   {    get    {     return m_FileBuffer;    }   }

  #endregion

  #region 上传下载公共方法

  /// <summary>   ///检查文件的基本信息是否正确     /// </summary>   private string CheckFileInfo()   {    // 文件的名称    if(m_FileName.Trim() == string.Empty)    {return "文件名称不能为空!";}

   //文件的大小    if (m_FileSize<=0)    {return "文件大小不能小于等于零!";}

   //文件的类型    if((m_FileType.Trim()==string.Empty)||(m_FileType.Trim().IndexOf(".") < 0))    {return "文件的类型不正确!";}

   return string.Empty;   }

  #endregion

  #region 文件上传

  /// <summary>   /// 根据上传路径,提取上传文件名称、内容、大小、类型等(不包括对文件的限制)   /// </summary>   public string UpFile( System.Web.UI.HtmlControls.HtmlInputFile InputFile )   {      if(InputFile.PostedFile != null)    {     UpFile InFile = new UpFile(InputFile);       m_FileName = InFile.GetUpFileName();//文件的名称         m_FileSize = InFile.GetUpFileSize();//文件的大小     m_FileType = InFile.GetUpFileType();//文件类型          //检查文件的基本信息是否正确     string ErrorInfo = CheckFileInfo();        if ( ErrorInfo != string.Empty )     { return ErrorInfo; }     

    //将文件保存到缓存,即文件的内容            m_FileBuffer = InFile.GetUpFileBuffer();     }    else    { return "请选择上传文件的路径!"; }       return string.Empty;   }   /// <summary>   /// 根据上传路径,提取上传文件名称、内容、大小、类型等(限制文件大小(KB))   /// </summary>   public string UpFile( System.Web.UI.HtmlControls.HtmlInputFile InputFile, int MaxFileSize )   {    if(InputFile.PostedFile != null)    {     UpFile InFile = new UpFile(InputFile);       m_FileName = InFile.GetUpFileName();//文件的名称         m_FileSize = InFile.GetUpFileSize();//文件的大小     m_FileType = InFile.GetUpFileType();//文件类型     //检查文件的基本信息是否正确     string ErrorInfo = CheckFileInfo();        if ( ErrorInfo != string.Empty )     { return ErrorInfo; }              //检查文件类型是否可以上传     if (!CheckFileSize(MaxFileSize))     {return "不能上传大于" + Convert.ToString(MaxFileSize)+ "KB的文件!"; }        

    //将文件保存到缓存,即文件的内容            m_FileBuffer = InFile.GetUpFileBuffer();     }    else    { return "请选择上传文件的路径!"; }       return string.Empty;   }   /// <summary>   /// 根据上传路径,提取上传文件名称、内容、大小、类型等(限制文件类型)   /// </summary>   public string UpFile( System.Web.UI.HtmlControls.HtmlInputFile InputFile, string sFileType )   {    if(InputFile.PostedFile != null)    {     UpFile InFile = new UpFile(InputFile);       m_FileName = InFile.GetUpFileName();//文件的名称         m_FileSize = InFile.GetUpFileSize();//文件的大小     m_FileType = InFile.GetUpFileType();//文件类型     //检查文件的基本信息是否正确     string ErrorInfo = CheckFileInfo();        if ( ErrorInfo != string.Empty )     { return ErrorInfo; }              //检查文件大小是否可以上传     if (!CheckFileType(sFileType))     {return "此文件类型不能上传!"; }     

    //将文件保存到缓存,即文件的内容            m_FileBuffer = InFile.GetUpFileBuffer();     }    else    { return "请选择上传文件的路径!"; }       return string.Empty;   }   /// <summary>   /// 根据上传路径,提取上传文件名称、内容、大小、类型等(限制文件类型和大小)   /// </summary>   public string UpFile( System.Web.UI.HtmlControls.HtmlInputFile InputFile, string sFileType, int MaxFileSize )   {    if(InputFile.PostedFile != null)    {     UpFile InFile = new UpFile(InputFile);       m_FileName = InFile.GetUpFileName();//文件的名称         m_FileSize = InFile.GetUpFileSize();//文件的大小     m_FileType = InFile.GetUpFileType();//文件类型     //检查文件的基本信息是否正确     string ErrorInfo = CheckFileInfo();        if ( ErrorInfo != string.Empty )     { return ErrorInfo; }              //检查文件类型是否可以上传     if (!CheckFileType(sFileType))     {return "此文件类型不能上传!"; }           //检查文件大小是否可以上传     if (!CheckFileSize(MaxFileSize))     {return "不能上传大于" + Convert.ToString(MaxFileSize)+ "KB的文件!"; } 

    //将文件保存到缓存,即文件的内容            m_FileBuffer = InFile.GetUpFileBuffer();     }    else    { return "请选择上传文件的路径!"; }       return string.Empty;   }   /// <summary>   ///是否允许上传该文件类型   ///参数:指定上传文件的类型,可多种类型,每种类型用尖括号括起来   /// </summary>   private bool CheckFileType(string sFileType)//例如:( <.doc><.txt><.bmp><.gif> )   {    bool access = false;//默认不可以上传    try    {     if (sFileType.ToLower().IndexOf( "<" + m_FileType.Trim().ToLower() + ">" ) >= 0)     {      access = true;     }    }    catch    { access = false; }

   return access;   }   /// <summary>   ///允许上传文件的大小   ///参数:指定上传文件大小的最大值(KB)   /// </summary>   private bool CheckFileSize( int MaxFileSize)   {    bool access = false;//默认不可以上传       if ( m_FileSize <= (MaxFileSize*1024) )    {     access = true;    }    return access;   }

  #endregion

  #region 文件下载

  /// <summary>   ///将指定的数据流写到服务器硬盘上   /// </summary>    public string WriteFileToServerHDD()   {       //检查文件的基本信息是否正确    string ErrorInfo = CheckFileInfo();       if ( ErrorInfo != string.Empty )    { return ErrorInfo; }   

   //写文件    DownFile dFile = new DownFile( m_FileDirectory, m_FileName );    if (File.Exists(dFile.FileName))    {     dFile.FileSetAttributes( System.IO.FileAttributes.Normal );     File.Delete( dFile.FileName );    }    else    {     dFile.WriteFile(m_FileBuffer);      }   

   return string.Empty;   }   /// <summary>   ///将指定的数据流写到服务器硬盘上   ///参数:数据库中的文件与硬盘上的文件内容相差多大时,才将数据库中的文件覆盖硬盘上的文件   /// </summary>    public string WriteFileToServerHDD( int compareSize )   {        //检查文件的基本信息是否正确    string ErrorInfo = CheckFileInfo();       if ( ErrorInfo != string.Empty )    { return ErrorInfo; } 

   //写文件    DownFile dFile = new DownFile( m_FileDirectory, m_FileName );      if (File.Exists(dFile.FileName))    {         dFile.FileSetAttributes( System.IO.FileAttributes.Normal );//设置属性     FileStream FStream = dFile.ReadFile();     long FLength = FStream.Length;     FStream.Close();          //硬盘上的文件与要写的文件相比较,是否符合相差长度,只有符合才写入硬盘中     if ( Math.Abs( FLength - m_FileSize ) >= compareSize )      {            File.Delete( dFile.FileName );      dFile.WriteFile(m_FileBuffer);     }    }    else    { dFile.WriteFile(m_FileBuffer); } 

   return string.Empty;     }   /// <summary>   ///得到下载文件的URL   /// </summary>     public string GetDownFileURL()   {    return m_FileDirectory.Replace(@"/", "/") + m_FileName.Replace(@"/", "/");       }   /// <summary>   /// 得到要下载文件的类型( 例如:.jpg, .bmp, .doc )   /// </summary>   private string GetFileType()   {     int iPos = m_FileName.LastIndexOf(".");    if (iPos<0) return string.Empty;    return m_FileName.Substring(iPos);   }

  #endregion

 }

 #endregion

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值