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,{

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

内容-处置':'附件;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,{

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

内容-处置':'附件;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下载文件的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: