实现HTTP下载的几种方式

我们在Internet上浏览网页时,经常会下载需要的文件,有些是FTP方式的下载,多数则是基于HTTP协议的文件下载,实质就是通过HTTP协议传输流数据。

HTTP协议传输的是MIME格式的数据,MIME定义于几个RFC的协议里,MIME的类型里有流数据相关的类型,关于MIME更多信息参考相关资料。

HTTP下载从技术上来说有两种实现方式

1. 直接链接到需要下载的文件

<a href="http://o2jam.9you.com/qihua2/songs/c-love%20love%20love.mp3">蔡依林 - 城堡</a>

这种方式使用简单,但也有一些限制,如果要下载的文件在浏览器里关联了对应的运行程序,则浏览器不会弹出下载对话框,而是直接在browser里打开这个文件了。解决的方法如下,

2. 链接到一个server端的程序

<a href="http://rainmaker.webex.com/DownloadServlet?file=bcs.exe">BCS 1.0</a>

server端程序可由jsp,php,asp等各种技术实现,上面是一个java的servlet,这个servlet取得客户端的参数file,然后读取对应的文件后组织一个http response。

HTTP下载从页面流程上来说有如下几种,

1. 点击下载链接后直接弹出下载对话框

这种方式通常是最好的实现方式,没有打开新页面,不会影响正常的页面流程。

使用上述的两种技术都可以实现这种下载方式,为了避免文件被浏览器打开,推荐写一个server端程序实现下载。

2. 点击下载链接后弹出一个新页面然后下载

有时想显示一个下载文件信息框给用户看,并且不想影响原来的页面流程,这时就可以弹出一个新页面,在新页面里显示相关的信息。

弹出新页面后,可以在这个新页面里给出一个链接或按钮,用户点击后开始下载文件,如果不想用户多一次点击,可以使用HTML的meta标签实现,如下

<META HTTP-EQUIV="refresh" content="5; URL=http://jaist.dl.sourceforge.net/sourceforge/xdoclet/xdoclet-lib-1.2.3.zip">

Open Source项目的下载实现

在Open Source项目的下载页面,用户点击某个下载地址后,页面没有变化,过了几秒种后浏览器会弹出一个下载文件对话框,这里其实是利用了HTML Meta标签

使用java下载时大概有如下3步:

   1. response.setContentType("file/unknown"); //设置content type为file/unkown
   2. response.setHeader("Content-Disposition", "attachment; filename=/"bcs.exe/""); //给出文件名
   3. OutputStream os = response.getOutputStream(); //往response里写文件

弹出空白页面并下载

看到过有的站点是这样实现的,点击下载链接后,弹出一个新的空白页面并在新弹出的浏览器实例上弹出下载对话框,当用户选择保存到本地并开始下载后,弹出的页面会自动关掉,不知这种方式的理由是什么?自动关闭浏览器又是如何实现的呢?

相关资料:
http://www.mhonarc.org/~ehood/MIME/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值