.net 1.0 文件下载大集合

文件下载方法汇总
本文介绍了多种文件下载的方法,包括直接通过HTTP响应下载本地文件、支持断点续传的大文件下载方式以及从远程URL获取文件并保存到本地的技术实现。
<script type="text/javascript">google_ad_client = "pub-2048279401139630";google_ad_slot = "8856771542";google_ad_width = 728;google_ad_height = 90;document.write("<s"+"cript type='text/javascript' s"+"rc='http://pagead2.googlesyndication.com/pagead/show_ads"+"."+"js'></scr"+"ipt>");</script>
方法一:
参数说明
AbsPath:文件绝对路径
FileName:文件原名
public static void DownloadFile(string AbsPath,string FileName)
{
FileStream fs 
= new FileStream(AbsPath, FileMode.Open, FileAccess.Read);
BinaryReader r 
= new BinaryReader(fs);
System.Web.HttpContext.Current.Response.AddHeader(
"Content-Disposition""attachment; filename="+FileName);
// System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;FileName");
System.Web.HttpContext.Current.Response.Charset = "GB2312";
System.Web.HttpContext.Current.Response.ContentType 
= "application/octet-stream";
System.Web.HttpContext.Current.Response.BinaryWrite(r.ReadBytes(Convert.ToInt32(fs.Length)));
System.Web.HttpContext.Current.Response.Flush() ;
");

方法二:
/**//// <summary>
/// 文件下载
/// </summary>
/// <param name="FullFileName"></param>

private void FileDownload(string FullFileName)
...
{
FileInfo DownloadFile 
= new FileInfo(FullFileName); 
Response.Clear();
Response.ClearHeaders();
Response.Buffer
=false;
Response.ContentType
="application/octet-stream";
Response.AppendHeader(
"Content-Disposition","attachment;filename=" +HttpUtility.UrlEncode(DownloadFile.FullName,System.Text.Encoding.UTF8));
Response.AppendHeader(
"Content-Length",DownloadFile.Length.ToString());
Response.WriteFile(DownloadFile.FullName);
Response.Flush();
");

 另一个较好的:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Threading;

/// <summary>
/// FileDownload 的摘要说明
/// </summary>
public class FileDownload
{
    
/// <summary>
    
/// 输出硬盘文件,提供下载 支持大文件、续传、速度限制、资源占用小
    
/// </summary>
    
/// <param name="_Request">Page.Request对象</param>
    
/// <param name="_Response">Page.Response对象</param>
    
/// <param name="_fileName">下载文件名</param>
    
/// <param name="_fullPath">带文件名下载路径</param>
    
/// <param name="_speed">每秒允许下载的字节数</param>
    
/// <returns>返回是否成功</returns>
    public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed)
    {
        
try
        {
            FileStream myFile 
= new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            BinaryReader br 
= new BinaryReader(myFile);
            
try
            {
                _Response.AddHeader(
"Accept-Ranges""bytes");
                _Response.Buffer 
= false;
                
long fileLength = myFile.Length;
                
long startBytes = 0;

                
int pack = 10240//10K bytes
                
//int sleep = 200;   //每秒5次   即5*10K bytes每秒
                int sleep = (int)Math.Floor((decimal)1000 * pack / _speed) + 1;
                
if (_Request.Headers["Range"!= null)
                {
                    _Response.StatusCode 
= 206;
                    
string[] range = _Request.Headers["Range"].Split(new char[] { '=''-' });
                    startBytes 
= Convert.ToInt64(range[1]);
                }
                _Response.AddHeader(
"Content-Length", (fileLength - startBytes).ToString());
                
if (startBytes != 0)
                {
                    _Response.AddHeader(
"Content-Range"string.Format(" bytes {0}-{1}/{2}", startBytes, fileLength - 1, fileLength));
                }
                _Response.AddHeader(
"Connection""Keep-Alive");
                _Response.ContentType 
= "application/octet-stream";
                _Response.AddHeader(
"Content-Disposition""attachment;filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8));

                br.BaseStream.Seek(startBytes, SeekOrigin.Begin);
                
int maxCount = (int)Math.Floor((decimal)(fileLength - startBytes) / pack) + 1;

                
for (int i = 0; i < maxCount; i++)
                {
                    
if (_Response.IsClientConnected)
                    {
                        _Response.BinaryWrite(br.ReadBytes(pack));
                        Thread.Sleep(sleep);
                    }
                    
else
                    {
                        i 
= maxCount;
                    }
                }
            }
            
catch
            {
                
return false;
            }
            
finally
            {
                br.Close();
                myFile.Close();
            }
        }
        
catch
        {
            
return false;
        }
        
return true;
    }

}

 下载远端文件


private void BT_Update_Click(object sender, System.EventArgs e)
  {
   
string slocal = Server.MapPath("."+ "/test.mdb";
   GetHttpFile(
"http://www.jinwensoft.com/demo/database/lawdoc.mdb", slocal);
  }

  
public bool GetHttpFile(string sUrl,string sSavePath)
  {

   
bool bRslt=false;

   WebResponse oWebRps
=null;

   WebRequest oWebRqst
=WebRequest.Create(sUrl);

   oWebRqst.Timeout
=50000;

   oWebRps
=oWebRqst.GetResponse();

   
if(oWebRps!=null)
   {

    BinaryReader oBnyRd
=new BinaryReader(oWebRps.GetResponseStream(),System.Text.Encoding.GetEncoding("GB2312"));
 
    
int iLen=Convert.ToInt32(oWebRps.ContentLength);
  
    FileStream oFileStream;

   
    
if(File.Exists(Request.MapPath("RecievedData.tmp")))
     oFileStream
=File.OpenWrite(sSavePath);
    
else
     oFileStream
=File.Create(sSavePath);

    oFileStream.SetLength((Int64)iLen);

&nbs<script type="text/javascript">google_ad_client = "pub-2048279401139630";google_ad_slot = "8856771542";google_ad_width = 728;google_ad_height = 90;document.write("<s"+"cript type='text/javascript' s"+"rc='http://pagead2.googlesyndication.com/pagead/show_ads"+"."+"js'></scr"+"ipt>");</script>rn
 bRslt;
  }


论坛演示地址: http://netfocus.b13.cnwg.cn 论坛功能设计  论坛前台: 1. 用户注册、登陆、注销; 2. 版块导航:显示所有的版块分组和版块; 3. 帖子列表:显示当前版块下所有的帖子,可以区分置顶帖子、精华帖子、推荐帖子; 4. 帖子内容:显示帖子内容; 5. 帖子回复:显示帖子的回复列表; 6. 添加帖子:用户添加新帖; 7. 添加回复:用户添加回复; 8. 精华帖子列表:显示所有的精华帖子; 9. 推荐帖子列表:显示所有的推荐帖子; 10. 帖子管理:具有帖子管理权限的人对帖子进行管理; 11. 回复管理:具有帖子回复管理权限的人对帖子回复进行管理;  论坛后台: 1. 版块组管理:添加、删除、修改; 2. 版块管理:添加、删除、修改,添加或修改时通过下拉框选择版块组; 3. 版主管理:可以管理论坛中每个版块的版主,如添加、删除版主; 4. 用户管理:查看用户资料、删除用户、封锁用户、解锁用户、重置密码; 5. 角色管理:添加、删除、修改; 默认定义如下角色: 系统管理员、用户管理员、角色管理员、版块管理员、版主管理员、版主、所有者、注册用户、所有人;其中所有者指发帖人,回复人;另外系统管理员、注册用户、所有者、所有人是内置角色,不能修改或删除;下面分别对每种角色的含义进行说明: 1) 系统管理员:拥有论坛所有权限; 2) 用户管理员:拥有用户管理权限; 3) 角色管理员:拥有角色管理权限; 4) 版块管理员:拥有版块管理权限; 5) 版主管理员:拥有版主管理权限; 6) 版主:拥有所有论坛事务管理权限; 7) 所有者:拥有对自己发表的帖子或回复的内容进行修改的权限;(此角色可以考虑禁用,出于数据真实性考虑,因为任何人都要对他或她所说的言行负责,不允许随便修改); 8) 注册用户:拥有一部分论坛事务,如看帖,发帖,回帖,管理和自己相关的一些帖子; 9) 所有人:这个角色只是一个映射角色,任何登陆网站的人都自动拥有此角色;此角色可以表示匿名用户;仅拥有此角色的人一般只能看帖,不能做其他任何事情。当然如果愿意,我们也可以给它分配更多的权限,如发帖,回帖。如果这样,那就意味着运行匿名用户发帖或回帖了。 6. 用户角色管理:对任意一个用户的所属角色进行管理(包括添加和删除用户所属角色); 7. 角色权限管理:分为两类进行管理; 系统管理权限:用户管理、角色管理、版块管理、版主管理; 论坛事务管理权限:浏览帖子、发表帖子、编辑帖子、置顶帖子、设为推荐帖子、设为精华帖子、删除帖子、修改回复、删除回复; 因为权限分为两种,所以角色权限管理也可以采用两个界面实现。这两个界面的行就是所有角色,列就是当前权限类型下的所有权限点。 8. 头像设置:设置用户的头像; 9. 密码修改; 10. 我的帖子管理:有我发布的帖子,我回复的帖子; 另外,一个论坛可能还常常有星级评定,积分设置,界面管理,等等其他辅助功能。这些东西可以在日后慢慢补充。
不断更新中  Asp.net页面内传参数方法  调用存储过程(两种方法比较)  调用存储过程通用类DBHelper  加密解密  SQL常用DBHelper  Asp.net存储过程无限分类  TreeView无限分类  无限分类MVC  荧光棒效果 获取控件上全选  回车转换成Tab  DataGrid超级连接列  DataGrid行随鼠标变色  数字格式化  日期格式化  打开新的窗口并传送参数  为按钮添加对话框  删除表格选定记录  删除表格记录警告  关于日期格式  表格超连接列传递参数  清空Cookie  获取错误信息并到指定页面  自定义异常处理  javascript小技巧  DotNet 密码加密的技术  用户MD5加密  ASP.net验证码实现  图片水印  防盗链  .NET(C#)连接各类数据库  读取配置文件数据库连接串  正则表达式验证  递归把十进制转换八进制(面试题目)  Mysql测试连接(DLL的引用)(插入与读取)  Asp.Net编辑器Fckeditor的使用  Asp.Net中FileUpload上传文件  Asp.Net中WebServices的使用  Asp.net手动绑定数据(分页、编辑、删除、加控件等操作)  Asp.net中My97DatePicker4.2日期的使用  Asp.net中DataList控件添加删除  Asp.net获取请求的用户信息IP地址  获取世界IP地址库显所在城市信息  MySQL事务处理  SQL内部常用函数  为gridview“删除”列添加确认对话框
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值