node文件下载的方式

node文件下载主要有两种方式,第一种就是原生的设置请求头的content-type 与 Content-Disposition来告诉浏览器,响应结果属于文件下载,准备好接收文件;第二种是使用express框架自带的下载api。

1. 设置响应头的方式

这里需要补充一下,http文件下载的知识。文件下载其实就是通过设置响应头的响应内容和行为,然后将数据流放入到响应体中,浏览器读取响应头的时候,得知这是什么类型的文件数据,浏览器会整理并打开自己的保存下载文件机制。

这里贴上各种文件的传输content-type查询链接:https://tool.oschina.net/commons

案例展示: 我需要下载test.txt文件

  1. 首先在route中提供文件下载的api

    app.route('/download').get(TestController.download);
    
  2. 在TestController中实现download方法,特别要注意响应头的content-type的设置,不同的文件类型会是不一样的content-type,可以根据上面的链接进行查询。

    const download = async(req, res) => {
        // 第一步,先获取文件的buffer字节流,这里具体做了什么,看第三步
        let {fileName, buffer} = await TestService.download();
        res.setHeader('Content-Type', 'application/octet-stream');
        res.setHeader('Content-Disposition', `attachment;filename=${fileName}`);
        res.status(200).send(buffer);
    }
    
  3. 实现TestService的download方法

    const download = () => {
      let filePath = '/test.txt';
      let buffer = fs.readFileSync(filePath);
      let fileName = path.basename(filePath);
      return {fileName, buffer};
    }
    
  4. 到这里,后端文件下载部分就完成了,如果你是通过超链接,点击一下就下载的话,可以顺利地去触发浏览器的默认下载行为,你的浏览器应该就会提示你正在下载了。如果你不是通过a标签,而是通过ajax或者axios的话,这时候需要前端再去通过超链接或者ifram去访问后端,触发浏览器的默认下载行为。

    若有需要,可以参考这篇文章:https://blog.csdn.net/interestANd/article/details/121855311

2. 通过express框架的download api去实现文件下载

​ 用这个的话,相对第一种方式就省事很多,他会帮我们把文件读取转换成二进制流,而且不需要我们设置响应头等信息,也能实现同样的效果。

res.download(path, [filename], [fn])

path所需传输附件的路径, 通常情况下浏览器会弹出一个下载文件的窗口。 浏览器弹出框里的文件名和响应头里的Disposition “filename=” 参数是一致的, 你也可以通过传入filename来自由设置。

当在传输的过程中发生一个错误时,可选的回调函数fn会被调用执行。 这个方法使用res.sendfile()传输文件。

res.sendfile(path, [options], [fn]])

path所传输附件的路径。

它会根据文件的扩展名自动设置响应头里的Content-Type字段。 回调函数fn(err)在传输完成或者发生错误时会被调用执行。

Options:

  • maxAge 毫秒,默认为0
  • root 文件相对的路径

这个方法可以非常良好的支持有缩略图的文件服务。

参考代码:

主要区别是在于controller层,其余的代码一致,不过由于我的这个案例需求实在是太简单了,就省略service层不做了。

const download = async (req, res) => {
  try {
    let filePath = '/test.txt';
    let fileName = path.basename(filePath);
    res.download(filePath, fileName);
  } catch (error) {
    return res.status(500).send({
      result: 'error',
      message: `Failed to download file: ${error.message}`
    })
  }
}
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 通常情况下,`.node`文件是通过在Node.js模块中使用C++编写本机扩展程序生成的。这些文件通常会随着模块的发布一起发布到npm上,可以通过npm来下载安装。 要下载一个包含`.node`文件Node.js模块,可以使用以下命令: ``` npm install <module-name> ``` 其中,`<module-name>`是要安装的模块名称。在安装完成后,`.node`文件将位于安装模块的`/build/Release`目录下。 另外,如果你想手动下载一个`.node`文件,你可以在GitHub上查找相应的仓库或者在官方网站上寻找相关的下载链接。 ### 回答2: 可以从以下几个来源下载.node文件。 首先,您可以从Node.js官方网站下载.node文件Node.js官方网站提供不同版本的Node.js安装程序,可以根据您的操作系统选择下载对应的版本。在官方网站上,您可以找到各种操作系统的Node.js安装程序,如Windows、macOS、Linux等。只需选择适合您操作系统的版本并点击下载按钮,即可下载.node文件。 另外,您还可以从Node.js的GitHub仓库下载.node文件Node.js的GitHub仓库提供了所有版本的Node.js的源代码和二进制文件。您可以在GitHub上找到Node.js的发布页面,并选择您想要下载的版本。在发布页面中,您可以找到预编译的二进制文件,包括.node文件,可以直接下载使用。 此外,一些第三方网站也提供了Node.js的下载服务。这些网站可能是一些软件下载平台或开发者社区。通过这些网站,您可以找到各种版本的Node.js,并下载.node文件。 无论您从哪里下载.node文件,建议您使用官方网站或可信的第三方网站进行下载。这样可以确保文件的安全性和可靠性。下载完毕后,您可以按照各个平台的安装指南进行安装和配置,以便开始使用Node.js的开发和运行环境。 ### 回答3: .node文件是通过Node.js的官方网站(https://nodejs.org/)下载的。在该网站的首页上,你可以看到一个大按钮,上面写着"下载"。点击该按钮,你将会看到几个不同版本的Node.js可供选择,包括稳定版和最新版本。选择适合自己操作系统的版本,点击相应的链接进行下载。 在选择版本时,你可以根据自己的需求选择适合的版本。例如,如果你是进行Node.js开发的话,可以选择最新的稳定版或者是最新的LTS(Long-Term Support)版本。稳定版会有较好的性能和功能,而LTS版本则更加稳定,适合长期使用。 下载完成后,根据自己使用的操作系统类型,双击下载的安装包进行安装。安装过程中,你可以根据提示进行设置和选择,详细阅读README文件以获取更多信息。 需要注意的是,Node.js是一个开源的跨平台JavaScript运行环境,因此可以在多种不同的操作系统上使用,包括Windows、MacOS和Linux等。所以,在下载Node.js之前,请确保选择和下载适用于自己操作系统的版本。 总之,要下载.node文件,你可以去Node.js的官方网站,选择适合自己操作系统的版本进行下载和安装。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

InterestAndFun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值