实现HTTP文件下载
【原文:http://www.jb51.net/article/89958.htm】
HTTP实现文件下载时,只要在服务器设置好相关响应头,并使用二进制传输文件数据即可,而客户端(浏览器)会根据响应头接收文件数据。而在Node.js中,设置好响应头后,读取文件流,再使用“.pipe()”
方法将流转接到响应对象Response
就可以实现一个简单的文件下载服务器。
1. 文件下载介绍
HTTP基于请求头和响应头实现状态交互,在得到服务器正确响应状态后,而客户端首先会解析响应头,并根据响应头来接收和展示数据(响应体)。对于文件下载来说,其实现过程如下:
1.客户端发起文件资源请求
2.服务器查找对应文件,并设置”Content-Type
”、”Content-Disposition
”等响应头,分别用于表示文件的”MIME”类型及文件描述
3.客户端根据服务器返回的响应头解析和接收文件数据
需要设置的响应头
设置文件下载响应头时,除了常用的HTTP响应头外,比较重要是还要设置以下两个响应头:
1
2
|
Content-Type: application/octet-stream Content-Disposition: attachment; filename=MyFileName.ext |
在上面的设置中,”Content-Type: application/octet-stream
”告诉浏览器这是一个二进制文件,”Content-Disposition
”告诉浏览器这是一个需要下载的附件并告诉浏览器默认的文件名。如果不添加”Content-Disposition
”响应头,浏览器可能会下载或显示文件内容,不同浏览器的处理有所不同。