node.js如何下载,nodejs生成文件

node.js如何下载,nodejs生成文件,Node.js实现下载文件的两种实用方式

最近我优化了几个新人写的动态表文件下载接口的性能瓶颈。我觉得很有必要将一篇文章总结成一篇文档,以提供有价值的参考。本文主要介绍两种实用的Node.js下载文件的方法,有需要的朋友可以参考一下。

目录

第一种方法是使用本机http模块。第二种方式是使用Express Axios下载文件,汇总并设置响应头返回数据流。

第一种方式:使用原生的http模块

我们只需要使用node.js的两个原生模块,fs和http,不需要安装第三方模块就可以下载文件。代码如下:

var fs=require( fs );

var http=require( http );

var server=http . create server();

server.on(请求,函数(请求,响应){

//获取请求URL

var url=request.url

//如果是下载文件的URL,会进行判断和处理。

if(URL===/download/hello . txt ){

//提取文件名hello.txt

var name=URL . substring(URL . lastindexof(/));

//创建一个可读流,读取当前项目目录下的hello.txt文件。

var RS=fs . create readstream(_ _ dirname / name);

//设置响应请求头,200表示成功状态码,headers表示设置请求头。

response.writeHead(200,{

“内容类型”:“应用程序/h3制下载”,

内容-处置:附件;filename= name

});

//将可读流传递给响应对象response

rs.pipe(响应);

}

});

server.listen(8888,function () {

Console.log(服务器启动成功,可通过http://127.0.0.1:8888访问);

});

然后你可以在http://127 . 0 . 0 . 1:8888/download/hello . txt下载文件。

第二种方式:使用Express+Axios下载文件

前端axios发送GET或POST请求下载文件,关键是处理响应返回的文件数据。

Index.html:首页点击按钮下载文件,请求通过axios发送。

!文档类型html

html lang=en

meta charset=UTF-8

!axios.js简介-

script src= https://cdn . jsdelivr . net/NPM/axios/dist/axios . min . js /script

/头

身体

按钮onclick=downloadFile()下载/按钮

/body

脚本

函数downloadFile() {

axios({

URL:“/文件/下载”,

方法: POST ,

response type:“blob”

}).然后(函数(响应){

//下载响应返回的数据为文件,修复代码。

//将响应数据作为Blob类型处理

var Blob=new Blob([response . data]);

//创建一个URL对象

var url=窗口。URL . createobjecturl(blob);

//创建一个A标记

var a=document . createelement( a );

a.href=url

a . download= hello . txt ;//在此指定下载文件的文件名

a . click();

//释放先前创建的URL对象

窗户。URL . revokeobjecturl(URL);

}).catch(函数(原因){

console.log(原因)

})

}

/脚本

/html

Index.js:使用express呈现index.html页面并处理下载请求。

var fs=require( fs );

var express=require( express );

var app=express();

//渲染index.html,与下载逻辑无关

app.get(/index.html ,函数(请求,响应){

fs.readFile(index.html ,function (err,data) {

如果(!呃){

response.end(数据);

}

});

});

//处理下载文件的请求

app . post(/文件/下载,函数(请求,响应){

var name= hello.txt//要下载的文件名

var path=_ _ dirname / name;//将要下载的文件的路径指定为当前项目目录下的hello.txt文件。

var f=fs . createreadstream(path);

response.writeHead(200,{

“内容类型”:“应用程序/h3制下载”,

内容-处置:附件;filename= name

});

f .管道(响应);

});

//监听端口,相当于原来的server.listen()

app.listen(8888,function () {

console.log(应用程序正在端口8888运行。);

});

还可以通过response.set()方法设置响应头:

response.set({

content-type : application/octet-stream ,//告诉浏览器这是一个二进制文件

内容-处置:附件;Filename= name//告诉浏览器这是一个需要下载的文件。

});

总结

下载文件其实很简单,任何语言都是如此:

第一步是设置响应头。第二步是返回数据流。

设置响应头

下载文件需要设置的响应头是Content-Type和Content-Disposition。响应头与编程语言无关,是通用的。

“content-type”:“application/octet-stream”表示这是一个二进制文件。

内容-处置:附件; Filename=hello.txt 表示这是一个需要下载的附件,并告诉浏览器默认文件名。

返回数据流

读取要下载的文件,以二进制流的形式响应客户端。

关于Node.js下载文件的两种实用方法的文章到此为止,关于Node.js下载文件的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

node.js如何下载,nodejs生成文件