• ORM映射框架总结文件下载


    本段代码提供了asp.net 中的各种文件下载方式。

    代码
      1 /**
      2  * 日期:2009-3-13
      3  * 作者:
      4  * 功能:下载文件
      5  * */
      6 
      7 using System;
      8 using System.Configuration;
      9 using System.Data;
     10 using System.Linq;
     11 using System.Web;
     12 using System.Web.Security;
     13 using System.Web.UI;
     14 using System.Web.UI.HtmlControls;
     15 using System.Web.UI.WebControls;
     16 using System.Web.UI.WebControls.WebParts;
     17 using System.Xml.Linq;
     18 using System.Web.Services;
     19 using System.IO;
     20 using CommonData.Exceptions;
     21 
     22 namespace CommonData.DownLoad
     23 {
     24     public partial class Down
     25     {
     26 
     27         #region(下载相关属性)
     28         private string _downFilePath;
     29 
     30         /// <summary>
     31         /// 下载文件路径
     32         /// </summary>
     33         public string DownFilePath
     34         {
     35             get { return _downFilePath; }
     36             set { _downFilePath = value; }
     37         }
     38 
     39         private string _fileName;
     40 
     41         /// <summary>
     42         /// 下载的文件名称
     43         /// </summary>
     44         private string FileName
     45         {
     46             get { return this._downFilePath.Substring(this._downFilePath.LastIndexOf("\\"+ 1); }
     47             set { _fileName = value; }
     48         }
     49 
     50         private string _saveName;
     51 
     52         /// <summary>
     53         /// 下载保存文件名称
     54         /// </summary>
     55         public string SaveName
     56         {
     57             get { return _saveName; }
     58             set { _saveName = value; }
     59         }
     60         #endregion
     61 
     62         #region (构造方法)
     63         /// <summary>
     64         /// 无参数构造方法
     65         /// </summary>
     66         public Down()
     67         {
     68         }
     69 
     70         /// <summary>
     71         /// 有参数构造方法
     72         /// </summary>
     73         /// <param name="downFilePath">下载文件的物理路径</param>
     74         public Down(string downFilePath)
     75         {
     76             this._downFilePath = downFilePath;
     77         }
     78 
     79         /// <summary>
     80         /// 有参数的构造方法
     81         /// </summary>
     82         /// <param name="downFilePath">下载文件的物理路径</param>
     83         /// <param name="saveName">下载保存文件的名称</param>
     84         public Down(string downFilePath, string saveName)
     85         {
     86             this._downFilePath = downFilePath;
     87             this._saveName = saveName;
     88         }
     89         #endregion
     90 
     91 
     92 
     93         #region(TransmitFile)
     94         /// <summary>
     95         /// 下载超过400mb的文件(TransmitFile)
     96         /// </summary>
     97         /// <param name="filepath">下载文件的物理路径</param>
     98         /// <param name="saveName">下载保存的文件名称</param>
     99         /// <returns></returns>
    100         public void TransmitFile(string filepath, string saveName)
    101         {
    102             this._downFilePath = filepath;
    103             if (string.IsNullOrEmpty(saveName))
    104             {
    105                 this._saveName = this.FileName;
    106             }
    107             else
    108             {
    109                 this._saveName = saveName;
    110             }
    111             if (!string.IsNullOrEmpty(this.DownFilePath))
    112             {
    113                 if (File.Exists(this._downFilePath))
    114                 {
    115                     System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
    116                     System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition""attachment;filename=" + System.Web.HttpUtility.UrlEncode(this.SaveName, System.Text.Encoding.UTF8));
    117                     System.Web.HttpContext.Current.Response.TransmitFile(this._downFilePath);
    118                 }
    119                 else
    120                 {
    121                     throw new CommonFileException("下载的文件已经被删除!");
    122                 }
    123             }
    124             else
    125             {
    126                 throw new CommonFileException("未提供可供下载的文件路径");
    127             }
    128         }
    129 
    130         /// <summary>
    131         /// 下载超过400mb的文件(TransmitFile)
    132         /// </summary>
    133         /// <param name="filepath">下载文件的物理路径</param>
    134         public void TransmitFile(string filepath)
    135         {
    136             this.TransmitFile(filepath, "");
    137         }
    138 
    139         /// <summary>
    140         /// 下载超过400mb的文件(TransmitFile)
    141         /// </summary>
    142         /// <returns></returns>
    143         public void TransmitFile()
    144         {
    145             this.TransmitFile(this._downFilePath, this.SaveName);
    146         }
    147         #endregion
    148 
    149 
    150         #region(WriteFile)
    151         /// <summary>
    152         /// WriteFile 
    153         /// </summary>
    154         /// <param name="filepath">下载文件的物理路径</param>
    155         /// <param name="saveName">下载保存的文件名称</param>
    156         public void WriteFile(string filepath, string saveName)
    157         {
    158             this._downFilePath = filepath;
    159             if (string.IsNullOrEmpty(saveName))
    160             {
    161                 this._saveName = this.FileName;
    162             }
    163             else
    164             {
    165                 this._saveName = saveName;
    166             }
    167             if (!string.IsNullOrEmpty(this.DownFilePath))
    168             {
    169                 if (File.Exists(this.DownFilePath))
    170                 {
    171                     FileInfo fileInfo = new FileInfo(this._downFilePath);
    172                     System.Web.HttpContext.Current.Response.Clear();
    173                     System.Web.HttpContext.Current.Response.ClearContent();
    174                     System.Web.HttpContext.Current.Response.ClearHeaders();
    175                     System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition""attachment;filename=" + HttpUtility.UrlPathEncode(this._saveName));
    176                     System.Web.HttpContext.Current.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
    177                     System.Web.HttpContext.Current.Response.AddHeader("Content-Transfer-Encoding""binary");
    178                     System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
    179                     System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
    180                     System.Web.HttpContext.Current.Response.WriteFile(fileInfo.FullName);
    181                     System.Web.HttpContext.Current.Response.Flush();
    182                     System.Web.HttpContext.Current.Response.End();
    183                 }
    184                 else
    185                 {
    186                     throw new CommonFileException("下载的文件已经被移除!");
    187                 }
    188             }
    189             else
    190             {
    191                 throw new CommonFileException("未提供可供下载的文件路径!");
    192             }
    193         }
    194 
    195         /// <summary>
    196         /// WriteFile
    197         /// </summary>
    198         /// <param name="filepath">下载文件的物理路径</param>
    199         public void WriteFile(string filepath)
    200         {
    201             this.WriteFile(filepath, "");
    202         }
    203 
    204 
    205         /// <summary>
    206         /// WriteFile
    207         /// </summary>
    208         public void WriteFile()
    209         {
    210             this.WriteFile(this._downFilePath, this._saveName);
    211         }
    212 
    213         #endregion
    214 
    215         #region(WriteFile分块下载)
    216         /// <summary>
    217         /// WriteFile分块下载
    218         /// </summary>
    219         /// <param name="filepath">下载文件的物理路径</param>
    220         /// <param name="saveName">下载保存文件的名称</param>
    221         public void WriteFilePart(string filepath, string saveName)
    222         {
    223             this._downFilePath = filepath;
    224             if (string.IsNullOrEmpty(saveName))
    225             {
    226                 this._saveName = this.FileName;
    227             }
    228             else
    229             {
    230                 this._saveName = saveName;
    231             }
    232 
    233             if (!string.IsNullOrEmpty(this.DownFilePath))
    234             {
    235                 if (File.Exists(this.DownFilePath))
    236                 {
    237                     const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力 
    238                     byte[] buffer = new byte[ChunkSize];
    239 
    240                     System.Web.HttpContext.Current.Response.Clear();
    241                     FileStream iStream = File.OpenRead(this.DownFilePath);
    242                     long dataLengthToRead = iStream.Length;//获取下载的文件总大小 
    243                     System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
    244                     System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition""attachment; filename=" + HttpUtility.UrlEncode(this.SaveName));
    245                     while (dataLengthToRead > 0 && System.Web.HttpContext.Current.Response.IsClientConnected)
    246                     {
    247                         int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小 
    248                         System.Web.HttpContext.Current.Response.OutputStream.Write(buffer, 0, lengthRead);
    249                         System.Web.HttpContext.Current.Response.Flush();
    250                         dataLengthToRead = dataLengthToRead - lengthRead;
    251                     }
    252                     System.Web.HttpContext.Current.Response.Close();
    253 
    254                 }
    255                 else
    256                 {
    257                     throw new CommonFileException("下载的文件已经被移除!");
    258                 }
    259             }
    260             else
    261             {
    262                 throw new CommonFileException("未提供可供下载的文件路径!");
    263             }
    264         }
    265 
    266         /// <summary>
    267         /// WriteFile分块下载
    268         /// </summary>
    269         /// <param name="filepath">下载文件的物理路径</param>
    270         public void WriteFilePart(string filepath)
    271         {
    272             this.WriteFilePart(filepath, "");
    273         }
    274 
    275         /// <summary>
    276         /// WriteFile分块下载
    277         /// </summary>
    278         public void WriteFilePart()
    279         {
    280             this.WriteFilePart(this.DownFilePath, this.SaveName);
    281         }
    282         #endregion
    283 
    284 
    285         #region(以流的方式下载)
    286         /// <summary>
    287         /// 以流的方式下载
    288         /// </summary>
    289         /// <param name="filepath">下载文件的物理路径</param>
    290         /// <param name="saveName">下载保存文件的名称</param>
    291         public void DownStream(string filepath, string saveName)
    292         {
    293             this._downFilePath = filepath;
    294             if (string.IsNullOrEmpty(saveName))
    295             {
    296                 this._saveName = this.FileName;
    297             }
    298             else
    299             {
    300                 this._saveName = saveName;
    301             }
    302             if (!string.IsNullOrEmpty(this.DownFilePath))
    303             {
    304                 if (File.Exists(this.DownFilePath))
    305                 {
    306                     //以字符流的形式下载文件 
    307                     FileStream fs = new FileStream(this.DownFilePath, FileMode.Open);
    308                     byte[] bytes = new byte[(int)fs.Length];
    309                     fs.Read(bytes, 0, bytes.Length);
    310                     fs.Close();
    311                     System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
    312                     //通知浏览器下载文件而不是打开 
    313                     System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition""attachment; filename=" + HttpUtility.UrlEncode(this.SaveName, System.Text.Encoding.UTF8));
    314                     System.Web.HttpContext.Current.Response.BinaryWrite(bytes);
    315                     System.Web.HttpContext.Current.Response.Flush();
    316                     System.Web.HttpContext.Current.Response.End();
    317                 }
    318                 else
    319                 {
    320                     throw new CommonFileException("下载的文件已经被移除!");
    321                 }
    322             }
    323             else
    324             {
    325                 throw new CommonFileException("未提供可供下载的文件路径!");
    326             }
    327 
    328         }
    329 
    330         /// <summary>
    331         /// 以流的方式下载
    332         /// </summary>
    333         /// <param name="filepath">下载文件的物理路径</param>
    334         public void DownStream(string filepath)
    335         {
    336             this.DownStream(filepath, "");
    337         }
    338 
    339         /// <summary>
    340         /// 以流的方式下载
    341         /// </summary>
    342         public void DownStream()
    343         {
    344             this.DownStream(this.DownFilePath, this.SaveName);
    345         }
    346         #endregion
    347 
    348         #region(下载一个动态产生的文本文件)
    349         /// <summary>
    350         /// 下载一个动态产生的文本文件
    351         /// </summary>
    352         /// <param name="webForm">父页面对象</param>
    353         /// <param name="saveName">下载保存文件的名称</param>
    354         /// <param name="fileBody">下载文件的内容</param>
    355         public void DownloadFile(System.Web.UI.Page webForm, string saveName, string fileBody)
    356         {
    357             this._saveName = saveName;
    358             webForm.Response.ClearHeaders();
    359             webForm.Response.Clear();
    360             webForm.Response.Expires = 0;
    361             webForm.Response.Buffer = true;
    362             webForm.Response.AddHeader("Accept-Language""zh-tw");
    363             //'文件名称
    364             webForm.Response.AddHeader("content-disposition""attachment; filename='" + System.Web.HttpUtility.UrlEncode(this.SaveName, System.Text.Encoding.UTF8) + "'");
    365             webForm.Response.ContentType = "Application/octet-stream";
    366             //'文件内容
    367             webForm.Response.Write(fileBody);//-----------
    368             webForm.Response.End();
    369         }
    370         #endregion
    371 
    372         /// <summary>
    373         /// 下载一个服务端存在文件文本文件
    374         /// </summary>
    375         /// <param name="webForm">父页面对象</param>
    376         /// <param name="saveName">下载保存文件的名称</param>
    377         /// <param name="filepath">下载文件路径</param>
    378         [Obsolete]
    379         private void DownloadFileByFilePath(System.Web.UI.Page webForm, string saveName, string filepath)
    380         {
    381             this._downFilePath = filepath;
    382             if (string.IsNullOrEmpty(saveName))
    383             {
    384                 this._saveName = this.FileName;
    385             }
    386             else
    387             {
    388                 this._saveName = saveName;
    389             }
    390 
    391             if (!string.IsNullOrEmpty(this.DownFilePath))
    392             {
    393                 if (File.Exists(this.DownFilePath))
    394                 {
    395                     webForm.Response.ClearHeaders();
    396                     webForm.Response.Clear();
    397                     webForm.Response.Expires = 0;
    398                     webForm.Response.Buffer = true;
    399                     webForm.Response.AddHeader("Accept-Language""zh-tw");
    400                     //文件名称
    401                     webForm.Response.AddHeader("content-disposition""attachment; filename=" + System.Web.HttpUtility.UrlEncode(this.SaveName, System.Text.Encoding.UTF8));
    402                     webForm.Response.ContentType = "Application/octet-stream";
    403                     //文件内容
    404                     webForm.Response.Write(System.IO.File.ReadAllBytes(this.DownFilePath).ToString());//---------
    405                     webForm.Response.End();
    406                 }
    407                 else
    408                 {
    409                     throw new CommonFileException("下载的文件已经被移除!");
    410                 }
    411             }
    412             else
    413             {
    414                 throw new CommonFileException("未提供可供下载的文件路径!");
    415 
    416             }
    417         }
    418 
    419     }
    420 }
    421 
  • 相关阅读:
    Java动态规划实现将数组拆分成相等的两部分
    动态规划解决hdu龟兔赛跑
    Eclipse上将maven项目部署到tomcat,本地tomcat下,webapps下,web-inf下lib下没有jar包决绝方案
    【转】spring IOC和AOP的理解
    Eclipse创建一个普通的java web项目
    linux服务器自动备份与删除postgres数据库数据
    开启Linux服务器vnc远程桌面详细步骤
    设计模式---JDK动态代理和CGLIB代理
    菜谱
    网络协议-dubbo协议
  • 原文地址:https://www.cnblogs.com/qingyuan/p/1637823.html
Copyright © 2020-2023  润新知