我们在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下载的几种方式相关推荐

  1. STM32_基础入门_程序下载的两种方式

    一.ISP串口下载 1.所涉及工具:MDK+FlyMcu 2.硬件连接 3.连接步骤 1.搜索并选择对应串口 2.选择要下载的hex文件,将"编程前重装文件"打勾 3.勾选&quo ...

  2. python-网络图片下载(两种方式)

    利用python进行网络图片下载(两种方式) 1:方式一 1:代码 # coding=utf-8 """ @author: jiajiknag 程序功能: 图片批量下载_ ...

  3. mt4下载的2种方式

    目前,mt4软件已其特有的优势吸引了众多投资者,成为了这些年比较受欢迎的外汇交易平台. 对于经常用手机进行交易的人员来说,就需要下载安卓版或者苹果版. 那么分别以2个版为例,讲解一下如何下载. 下面介 ...

  4. 下载网络图片两种方式

    比如因特网上有一图片资源http://img.7799520.com/00356c0e-1725-4dc2-b091-5db958b6c637,现在要把该资源下载到本地,下面介绍如下两种方式. 方式一 ...

  5. JS 下载文件两种方式总结

    后端返回Blob对象(文件流),完成导出.下载功能: 1.介绍Blob Blob Blob 对象表示一个不可变.原始数据的类文件对象.它的数据可以按文本或二进制的格式进行读取,也可以转换成 Reada ...

  6. javascript下载文件几种方式,接收后台返回流下载或直接下载文件

    目录 1 javascript下载文件7中方式 1.1 window.location.href下载 1.2 window.location下载 1.3 iframe下载 1.4 form表单的形式下 ...

  7. 前端实现HTML转PDF下载的两种方式

    方式一:使用html2canvas和jspdf插件实现 该方式是通过html2canvas将HTML页面转换成图片,然后再通过jspdf将图片的base64生成为pdf文件.实现步骤如下: 1,下载插 ...

  8. 轻松解决yum源不能正常下载的四种方式

    文章目录 一.yum源概述 二.yum源配置方法一(阿里云源) 三.yum源配置方法二(本地挂载目录) 四.yum源配置方法三(远程挂载目录) 五.yum源配置方法三(yum源故障问题解决方法) yu ...

  9. GFZ数据下载的一种方式分享

    写在前面,本文转载自微信公众号"测绘者说" 在进行地球物理相关研究(特别是质量负荷)时,经常会用到德国地学中心(GFZ)提供的产品.其中包括但不限于非潮汐大气负荷.非潮汐海洋负荷. ...

  10. .net 下载文件几种方式

    方式一:TransmitFile实现下载.将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件. protected void Button1_Click(object sender, ...

最新文章

  1. jQuery DateTimePicker 日期和时间插件
  2. 复习笔记(三)——C++类和对象
  3. 万兆以太网测试仪应该具备什么功能
  4. c语言用宏定义常量_使用宏定义常量以在C的数组声明中使用
  5. C#OOP之一面向对象简介
  6. opencv-api houshlinesp
  7. ionic3 百度地图插件定位 问题
  8. 答对10个算我输,示波器基础100问
  9. 报童问题求解最大利润_矩问题和分布式鲁棒优化:由阿里数学竞赛题说开...
  10. 辞退了一位简历造假的程序员,简历美化可以,造假不可取!
  11. PHP生成腾讯云API签名
  12. 多头平仓,白糖再度下跌
  13. 安卓开发者必备的5款App:终端模拟器、颜色萃取、移动IDE等
  14. <Zhuuu_ZZ>HIVE(九)窗口函数
  15. 想编程,是勤奋自学还是去培训班学习?
  16. el-cascader省市区 三级数据
  17. 哈罗python的学费多少-数据分析面试题总结
  18. 基于矢量切片的电子地图配图(三)配图准备
  19. 响应式布局:CSS3弹性盒flex布局模型
  20. mysql及格率70以上_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?| 原力计划...

热门文章

  1. 【休憩时的练手】—— 制作简易的网易云音乐播放器
  2. 分层总和法matlab,高填方路基沉降检测之回归法
  3. 网络知识:光猫光纤宽带故障排查笔记!
  4. ShellServiceObjectDelayLoad注册表键值作用
  5. 老男孩python作业_老男孩python学习之作业一购物小程序
  6. MongoDB 高阶
  7. SRIO IP的学习与应用
  8. matlab中pwm占空比计算代码,如何计算pwm波占空比
  9. android随机抽奖代码_Android 中从一个集合或者数组中随机抽取几个不同的值
  10. 玻利亚(Polya)的《怎样解题》