首页 > 编程 > .NET > 正文

ASP.NET页面下载程序

2024-07-10 13:11:05
字体:
来源:转载
供稿:网友
中国最大的web开发资源网站及技术社区,

在网站的制作中经常需要开发下载文件的功能,下面三种下载文件的办法:
1、asp实现下载的代码
<%
filename = request.querystring("filename")
if filename = "" then
    response.write "请输入filename参数,指定下载的文件名"
else
    response.contenttype = "application/octet-stream"
    response.addheader "content-disposition", "attachment; filename =" & filename
    set filestream = server.createobject("adodb.stream")
    filestream.mode = 3
    filestream.type = 1
    filestream.open
    filestream.loadfromfile( server.mappath(filename))

    response.binarywrite( filestream.read )

    filestream.close()
    set filestream = nothing
end if
%>把上述代码存成asp类型的文件,使用时类似:download.asp?filename=a.gif。
2、使用webclient
在下载按钮事件中加入如下代码
system.net.webclient wc = new system.net.webclient();
        wc.downloadfile( "http://localhost/a.gif", "c:/a.gif");
上述代码会把服务器端的a.gif文件在没有任何提示的情况下下载的客户端的c盘,没有任何提示还是比较可怕的,不过有的时候确实需要这样做。该代码也可以在桌面程序运行。
3、带有下载提示的asp net下载代码
//打开要下载的文件
system.io.filestream r = new system.io.filestream(filename, system.io.filemode.open);
//设置基本信息
        response.buffer = false;
        response.addheader("connection", "keep-alive");
        response.contenttype = "application/octet-stream";
        response.addheader("content-disposition", "attachment;filename=" + system.io.path.getfilename(filename));
        response.addheader("content-length", r.length.tostring());

       
        while (true)
        {
            //开辟缓冲区空间
            byte[] buffer = new byte[1024];
            //读取文件的数据
            int leng = r.read(buffer, 0, 1024);
            if (leng == 0)//到文件尾,结束
                break;
            if (leng == 1024)//读出的文件数据长度等于缓冲区长度,直接将缓冲区数据写入
                response.binarywrite(buffer);
            else
            {
                //读出文件数据比缓冲区小,重新定义缓冲区大小,只用于读取文件的最后一个数据块
                byte[] b = new byte[leng];
                for (int i = 0; i < leng; i++)
                    b[i] = buffer[i];
                response.binarywrite(b);
            }
        }
        r.close();//关闭下载文件
        response.end();//结束文件下载
该方法有下载提示框,服务器端可以知道何时下载完毕。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表