实现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/
实现HTTP下载的几种方式相关推荐
- STM32_基础入门_程序下载的两种方式
一.ISP串口下载 1.所涉及工具:MDK+FlyMcu 2.硬件连接 3.连接步骤 1.搜索并选择对应串口 2.选择要下载的hex文件,将"编程前重装文件"打勾 3.勾选&quo ...
- python-网络图片下载(两种方式)
利用python进行网络图片下载(两种方式) 1:方式一 1:代码 # coding=utf-8 """ @author: jiajiknag 程序功能: 图片批量下载_ ...
- mt4下载的2种方式
目前,mt4软件已其特有的优势吸引了众多投资者,成为了这些年比较受欢迎的外汇交易平台. 对于经常用手机进行交易的人员来说,就需要下载安卓版或者苹果版. 那么分别以2个版为例,讲解一下如何下载. 下面介 ...
- 下载网络图片两种方式
比如因特网上有一图片资源http://img.7799520.com/00356c0e-1725-4dc2-b091-5db958b6c637,现在要把该资源下载到本地,下面介绍如下两种方式. 方式一 ...
- JS 下载文件两种方式总结
后端返回Blob对象(文件流),完成导出.下载功能: 1.介绍Blob Blob Blob 对象表示一个不可变.原始数据的类文件对象.它的数据可以按文本或二进制的格式进行读取,也可以转换成 Reada ...
- javascript下载文件几种方式,接收后台返回流下载或直接下载文件
目录 1 javascript下载文件7中方式 1.1 window.location.href下载 1.2 window.location下载 1.3 iframe下载 1.4 form表单的形式下 ...
- 前端实现HTML转PDF下载的两种方式
方式一:使用html2canvas和jspdf插件实现 该方式是通过html2canvas将HTML页面转换成图片,然后再通过jspdf将图片的base64生成为pdf文件.实现步骤如下: 1,下载插 ...
- 轻松解决yum源不能正常下载的四种方式
文章目录 一.yum源概述 二.yum源配置方法一(阿里云源) 三.yum源配置方法二(本地挂载目录) 四.yum源配置方法三(远程挂载目录) 五.yum源配置方法三(yum源故障问题解决方法) yu ...
- GFZ数据下载的一种方式分享
写在前面,本文转载自微信公众号"测绘者说" 在进行地球物理相关研究(特别是质量负荷)时,经常会用到德国地学中心(GFZ)提供的产品.其中包括但不限于非潮汐大气负荷.非潮汐海洋负荷. ...
- .net 下载文件几种方式
方式一:TransmitFile实现下载.将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件. protected void Button1_Click(object sender, ...
最新文章
- jQuery DateTimePicker 日期和时间插件
- 复习笔记(三)——C++类和对象
- 万兆以太网测试仪应该具备什么功能
- c语言用宏定义常量_使用宏定义常量以在C的数组声明中使用
- C#OOP之一面向对象简介
- opencv-api houshlinesp
- ionic3 百度地图插件定位 问题
- 答对10个算我输,示波器基础100问
- 报童问题求解最大利润_矩问题和分布式鲁棒优化:由阿里数学竞赛题说开...
- 辞退了一位简历造假的程序员,简历美化可以,造假不可取!
- PHP生成腾讯云API签名
- 多头平仓,白糖再度下跌
- 安卓开发者必备的5款App:终端模拟器、颜色萃取、移动IDE等
- <Zhuuu_ZZ>HIVE(九)窗口函数
- 想编程,是勤奋自学还是去培训班学习?
- el-cascader省市区 三级数据
- 哈罗python的学费多少-数据分析面试题总结
- 基于矢量切片的电子地图配图(三)配图准备
- 响应式布局:CSS3弹性盒flex布局模型
- mysql及格率70以上_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?| 原力计划...