在网站的制作中经常需要开发下载文件的功能,下面三种下载文件的办法:
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();//结束文件下载
该方法有下载提示框,服务器端可以知道何时下载完毕。
新闻热点
疑难解答
图片精选