asp.net文件下载类

asp教程.net文件下载类
<%@ Page Language="VB" ContentType="text/html" ResponseEncoding="gb2312" %>
<html xmlns="http://www.111cn.net/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>asp.net教程文件下载类</title>
</head>
<body>
<%
'件下载类是什么意思?
实现下载功能?
DownloadData 方法通过 address 参数指定的 URI 下载资源。此方法在下载资源时阻止。若要下载资源并在等待服务器响应的同时继续执行,请使用 DownloadDataAsync 方法之一。

如果 BaseAddress 属性不是空字符串 (""),且 address 不包含绝对 URI,则 address 必须是相对 URI,此 URI 与 BaseAddress 组合在一起构成所请求数据的绝对 URI。如果 QueryString 属性不是空字符串,则将它追加到 address。

此方法使用 RETR 命令下载 FTP 资源。对于 HTTP 资源,使用 GET 方法。
下面的代码示例从服务器请求数据并显示所返回的数据。它假设 remoteUri 包含所请求的数据的有效 URI。

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();

  Response.End();

  }

  调用方法

  string path= Server.MapPath("fujian/"+文件名称);//path为服务器存放文件的路径

  FileDownload(path);
'文件下载类方法二

public class FileHelper
    {
        /// <summary>
        /// 利用Base64码对文件名进行加密处理。
        /// </summary>
        /// <param name="filename">文件名</param>
        /// <returns></returns>
        public static string Encrypt(string filename)
        {
            byte[] buffer = HttpContext.Current.Request.ContentEncoding.GetBytes(filename);
            return HttpUtility.UrlEncode(Convert.ToBase64String(buffer));
        }

        /// <summary>
        /// 利用Base64码对文件名进行解密处理。
        /// </summary>
        /// <param name="encryptfilename">文件名</param>
        /// <returns></returns>
        public static string Decrypt(string encryptfilename)
        {
            byte[] buffer = Convert.FromBase64String(encryptfilename);
            return HttpContext.Current.Request.ContentEncoding.GetString(buffer);
        }
    }

'方法三

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;
    
                double pack = 10240; //10K bytes
                //int sleep = 200;   //每秒5次   即5*10K bytes每秒
                int sleep = (int)Math.Floor(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((fileLength - startBytes) / pack) + 1;

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

                myFile.Close();
            }
        }
        catch
        {
            return false;
        }
        return true;
    }
 '调用 方法在Page_Load加入
 Page.Response.Clear();
  bool success = ResponseFile(Page.Request, Page.Response, "目的文件名称", @"源文件路径", 1024000);
  if (!success)
   Response.Write("下载文件出错!");
 Page.Response.End();

%>
</body>
</html>

时间: 2024-11-03 05:10:18

asp.net文件下载类的相关文章

ASP实例代码:asp操作Excel类

asp操作Excel类: <%'*******************************************************************'使用说明'Dim a'Set a=new CreateExcel'a.SavePath="x" '保存路径'a.SheetName="工作簿名称"       '多个工作表 a.SheetName=array("工作簿名称一","工作簿名称二")'a.Sh

关于ASP的(VBScript)类

vbscript 首先ASP的(VBScript)类是由事件和方法(它们就是构成类的成员了)构成的,如果大家还没有接触过,可以先看看下面的说明(哈哈,我是现学现卖,说得不好请见谅) 在 Class 块中,成员通过相应的声明语句被声明为 Private(私有成员,只能在类内部调用) 或 Public(公有成员,可以在类内外部调用) .被声明为 Private 的将只在 Class 块内是可见的.被声明为 Public 不仅在 Class 块的内部是可见的,对 Class 块之外的代码也是可见的.没

ASP 通用模板类

模板 ASP 通用模板类. 适合存在较少循环的模板.未实现内部循环,需要使用正则表达式,较浪费资源和时间,如需使用可参考这篇文章. 特性可设定私有缓存或公共缓存,提高效率可自由选择使用 Stream 组件或 FSO 组件支持自定义文件编码可保存文件 属性 Name文本,该模板名称,主要用于使用公共缓存时区分不同模板. Format文本,文件编码类型,可设置值. Object文本,使用组件,可设置值: StreamFSO PublicCache布尔值,使用公共缓存,开启时模板文件将保存到Appli

ASP在线升级类文件

在线 <% Rem ##################################################################################### Rem ## 在线升级类声明 Class Cls_oUpdate Rem ################################################################# Rem ## 描述: ASP 在线升级类 Rem ## 版本: 1.0.0 Rem ## 作者: 萧月

ASP在线升级类说明文件

在线 ●描述: ASP 在线升级类●版本: 1.0.0●作者: 萧月痕(xiaoyuehen)●MSN: xiaoyuehen(at)msn.com●请将(at)以 @ 替换

关于ASP的(VBScript)类,只希望给初学者看一看,希望对你们有帮助

vbscript|初学 首先ASP的(VBScript)类是由事件和方法(它们就是构成类的成员了)构成的,如果大家还没有接触过,可以先看看下面的说明(哈哈,我是现学现卖,说得不好请见谅) 在 Class 块中,成员通过相应的声明语句被声明为 Private(私有成员,只能在类内部调用) 或 Public(公有成员,可以在类内外部调用) .被声明为 Private 的将只在 Class 块内是可见的.被声明为 Public 不仅在 Class 块的内部是可见的,对 Class 块之外的代码也是可见

ASP通用分页类

分页 一.类的属性.方法 这是一个ASP通用分页类.你可以用它方便的给记录集分页,当然在网上有许多的分页类和分页函数.本分页主要有GetConn.GetRS.SQL.URL.CSSFile.FldName.FldNote.FldWidth.FldAlign.ShowPageType.TleFTColor.TleWidth.PageSize.ShowWidth.Init.Pages.ShowData.Close等属性和方法. 1.GetConn属性:用来获取一个已创建的Connection对象.

ASP的数据库类

数据|数据库 ASP的数据库类 一.前言 提到ASP操作数据库,大多数人会想到:共用的连接字串ConStr.Conn.Open ConStr建立数据库连接.Conn.Execute SqlCmd方式执行命令.RecordSet.Open Sql,Conn,1,1取得记录集,的确这种方法被99%的人或公司采用.对于操作数据库过程中产生的错误,恐怕99%的人不会进行处理,要么在程序的开头加入on error resume next"轻松"跳过去.要么让错误信息连同错误代码一同"暴

ASP如何计算文件下载需要的时间

下载 ASP如何计算文件下载需要的时间 <% Function DownloadTime(intFileSize, strModemType) Dim TimeInSeconds, ModemSpeed, strDownloadTime, AppendString Dim intYears, intWeeks, intDays Dim intHours, intMinutes, intSeconds intYears = 0 intWeeks = 0 intDays = 0 intHours =