ASP.NET 文件上传与下载

后台代码:

private void Button1_ServerClick(object sender, System.EventArgs e)
   {   
    HttpFileCollection files = HttpContext.Current.Request.Files;

    for (int iFile = 0; iFile < files.Count; iFile++)
    {          
     HttpPostedFile postedFile = files[iFile];

     string fileName,newfilename, fileExtension,filepath,savefilepath;
     fileName = System.IO.Path.GetFileName(postedFile.FileName);
     if (fileName != "")
     {
      fileExtension = System.IO.Path.GetExtension(fileName);
      newfilename=System.DateTime.Now.ToString("yyyyMMddhhmmssffff")+fileExtension;
      filepath=System.Web.HttpContext.Current.Request.MapPath("files/") + newfilename;
      savefilepath="files/"+newfilename;
      postedFile.SaveAs(filepath);
      insert(fileName,savefilepath,fileExtension);
     }
    }
   }

插入到数据库:

private void insert(string filename,string filepath,string fileExtension)
   {
    DataTable dt=new DataTable();
    dt.Columns.Add("filename",typeof(string));
    dt.Columns.Add("filepath",typeof(string));
    dt.Columns.Add("fileExtension",typeof(string));
    dt.Columns.Add("uploaddate",typeof(System.DateTime));

    DataRow dr=dt.NewRow();
    dr["filename"]=filename;
    dr["filepath"]=filepath;
    dr["fileExtension"]=fileExtension;
    dr["uploaddate"]=System.DateTime.Now.ToString();

    dt.Rows.Add(dr);
    this.repdown.DataSource=dt;
    this.repdown.DataBind();

   }

/*下载*/

private void downloadfile(string name,string path)
   {
   
    /*WriteFile实现下载

    FileInfo fileInfo = new FileInfo(Server.MapPath(path));
    Response.Clear();
    Response.ClearContent();
    Response.ClearHeaders();
    Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name));
    Response.AddHeader("Content-Length", fileInfo.Length.ToString());
    Response.AddHeader("Content-Transfer-Encoding", "binary");
    Response.ContentType = "application/octet-stream";
    Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
    Response.WriteFile(fileInfo.FullName);
    Response.Flush();
    Response.End();
    */
  

   
    System.IO.Stream iStream = null;
    byte[] buffer = new Byte[10000];  
    int length;
    long dataToRead;
    string filepath = Server.MapPath(path);
    string filename = System.IO.Path.GetFileName(filepath);
    try
    {
     iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
      System.IO.FileAccess.Read,System.IO.FileShare.Read);

     dataToRead = iStream.Length;
     Response.ContentType = "application/octet-stream";
     Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename));

     while (dataToRead > 0)
     {
      if (Response.IsClientConnected)
      {
       length = iStream.Read(buffer, 0, 10000); //每次读取 10K
       Response.OutputStream.Write(buffer, 0, length);
       Response.Flush();

       buffer= new Byte[10000];
       dataToRead = dataToRead - length;
      }
      else
      {    
       dataToRead = -1;
      }
     }
    }
    catch (Exception ex)
    {  
     Response.Write("Error : " + ex.Message);
    }
    finally
    {
     if (iStream != null)
     {  
      iStream.Close();
     }
    }  
  

   }

转载于:https://www.cnblogs.com/qinhaijun/archive/2011/08/26/2154443.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值