利用 Express.js 实现文件上传和下载教程

在现代 Web 应用中,文件上传和下载是非常常见的功能之一。Express.js 是一个常用的 Node.js Web 框架,可以非常便捷地实现文件上传和下载功能。

在本篇文章中,我们将详细介绍如何利用 Express.js 实现文件上传和下载,并提供相应的示例代码。通过本文的学习,你将了解到如何使用 Express.js 提供的中间件和模块,以及如何处理文件流和路由请求。

实现文件上传

首先让我们看一下如何利用 Express.js 实现文件上传。

安装相关模块

在开始编写代码之前,我们需要安装 multer 模块,用于处理文件上传。

可以通过以下命令进行安装:

--- ------- ------

配置 multer 中间件

在使用 multer 处理文件上传时,我们需要使用其提供的中间件。

在 Express.js 中,可以使用以下代码配置 multer 中间件:

----- ------ - ------------------

----- ------- - --------------------
  ------------ ----- ----- --- -- -
    -------- ------------
  --
  --------- ----- ----- --- -- -
    -------- -------------------
  --
---

----- ------ - -------- ------- ---

以上代码定义了一个名为 upload 的中间件,用于处理文件上传。其中 storage 是一个对象,用于配置文件上传的存储路径和文件名。

在上面的代码中,我们指定了上传文件的存储路径为 uploads/ 目录,并将文件名设置为上传时的原始文件名。

编写上传路由

multer 中间件配置好之后,我们需要编写上传文件的路由。

以下是一个简单的文件上传路由示例:

----- ------- - -------------------
----- ------ - -----------------

----- ------ - --------------------

---------------------- ---------------------- ----- ---- -- -
  ---------- -------- ----- -------- -------------- ---
---

-------------- - -------

在上面的代码中,我们定义了一个 POST 方法的 /upload 路由,用于处理用户上传的文件。

这里我们调用了之前配置的 multer 中间件,并设置了上传的文件字段为 file

当上传成功后,我们返回一个 JSON 格式的响应,告诉用户文件上传成功。

创建上传表单页面

为了测试文件上传功能,我们需要创建一个简单的 HTML 页面用于上传文件。

以下是一个示例上传表单页面的代码:

--------- -----
------
------
  ----------- ------ ---------------
-------
------
  ----- ------------- ----------------------------- -----------------
    ------ ----------- ------------
    ------- -----------------------------
  -------
-------
-------

在上面的代码中,我们创建了一个表单,用于让用户选择要上传的文件。在表单中需要设置 enctype 属性为 multipart/form-data,这样浏览器才能正确地解析文件上传的数据。

测试文件上传

现在,我们已经配置好了文件上传的相关代码,但还需要启动服务器并测试一下是否生效。

我们可以通过以下命令启动服务器:

---- ---------

然后在浏览器中访问上传表单页面,选择一个文件并上传。如果文件上传成功,则会看到一个消息提示 File uploaded successfully.

实现文件下载

除了文件上传,利用 Express.js 还可以非常方便地实现文件下载功能。

编写下载路由

与文件上传类似,我们需要编写一个路由用于响应用户的文件下载请求。

以下是一个简单的文件下载路由示例:

----- ------- - -------------------
----- ------ - -----------------

--------------------------------- ----- ---- -- -
  ----- - -------- - - -----------
  ----- ---- - ------------------------

  -------------------
---

-------------- - -------

在上面的代码中,我们定义了一个 GET 方法的 /download/:filename 路由,用于响应用户的文件下载请求。其中 :filename 是一个路由参数,用于指定要下载的文件名。

在路由处理函数中,我们首先通过 req.params 获取到用户请求中指定的文件名,然后将文件所在路径拼接出来。

最后我们使用 res.download() 方法将文件数据发送给用户端,让用户下载该文件。

测试文件下载

现在,我们已经编写好了文件下载的相关代码,同样需要启动服务器并测试是否生效。

我们可以通过以下命令启动服务器:

---- ---------

然后在浏览器中访问 http://localhost:3000/download/filename,其中 filename 是要下载的文件名。如果一切正常,则会弹出文件下载对话框,用于让用户保存文件。

总结

通过本文的学习,你已经了解到如何利用 Express.js 实现文件上传和下载功能。在实现过程中,我们使用了 multer 中间件和路由参数,并分别编写了文件上传和文件下载的路由和示例代码。

当你需要在你的 Web 应用中添加文件上传和下载功能时,可以借鉴本文中提供的代码,并进行相应的修改和优化。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/65abc8fdadd4f0e0ff5726e2


猜你喜欢

  • Docker 容器中使用 SSH 远程调试

    在开发 Web 应用时,开发人员经常需要在不同的环境中进行调试和部署。因此,Docker 已经成为了一个非常有用的容器技术,可以轻松地构建和部署应用,同时保证了应用程序的可移植性。

    9 个月前
  • MongoDB 中使用 $exists 进行存在性查询技巧分享

    MongoDB 是一种高性能、可扩展、面向文档的 NoSQL 数据库。在 MongoDB 中,可以使用 $exists 操作符来进行存在性查询,即查询某个字段是否存在。

    9 个月前
  • 在 Kubernetes 中使用 DaemonSets 的详细教程

    引言 DaemonSets是Kubernetes中的重要组件之一,它可以自动化管理集群中每个节点上的Pod。当新节点加入集群时,DaemonSets会自动在该节点上部署Pod,当节点删除时也会自动将P...

    9 个月前
  • 基于 Serverless 架构的公共交通信息系统方案

    介绍 在这个移动互联网时代,公共交通系统成为了城市运输的重要支撑,为了提升用户体验和智能化程度,越来越多的公共交通信息系统采用了 Serverless 架构来进行开发。

    9 个月前
  • Koa 和 Socket.IO 结合的最佳实践 801.Koa2+Vue2 全栈实践:打造图片上传与缩略服务

    课程介绍 在现代 Web 应用程序开发中,Koa 是一个强大的 Web 框架,Socket.IO 是一个实时通信协议。在本课程中,我们将一起学习如何将这两个工具结合使用,构建一个现代且功能强大的应用程...

    9 个月前
  • Express.js 中如何对 API 进行版本控制

    在进行 Web 应用程序的开发时,经常需要对 API 进行版本控制,以便于进行升级、优化、更改等操作,同时还能保证向后兼容性。在 Express.js 中,我们可以利用中间件的方式进行 API 版本的...

    9 个月前
  • 如何在 Jest 中处理 WebSockets?

    在前端开发中,WebSockets 是一种常用的实时通信协议。当我们在编写应用程序时,通常需要在 Jest 测试环境中进行测试,并且测试 WebSockets 功能可能是必要的。

    9 个月前
  • Apollo Server 中的数据加载机制及理解方式

    前言 Apollo Server 是一个非常受欢迎的 GraphQL 服务器框架,它提供了一种可以快速构建 GraphQL 服务器的方式,并且还包含了许多有用的功能,例如缓存、批处理和错误处理等。

    9 个月前
  • 使用 ES9 的 ASYNC/AWAIT 来处理异步行为

    使用 ES9 的 ASYNC/AWAIT 来处理异步行为 异步编程是现代前端开发必备的技能之一。它允许我们通过JavaScript异步执行代码,而不会让浏览器冻结。

    9 个月前
  • Deno 中如何实现邮件发送?

    在 Deno 中实现邮件发送可以使用一个叫做 Deno Mailer 的库。它是一个简单易用的 Deno 库,可以帮助开发者发送邮件。 安装 Deno Mailer 要使用此库,需要使用以下命令进行安...

    9 个月前
  • Redis 适用于哪些场景及与 Memcached 的区别分析

    Redis 是一个快速、开源、内存键值数据库,被广泛运用于一些大型的互联网应用中。与此相比,Memcached 是一个可扩展的高性能分布式内存对象缓存系统。本文将详细讨论 Redis 和 Memcac...

    9 个月前
  • 如何使用 Nginx 反向代理和负载均衡 RESTful API 接口?

    什么是 RESTful API? REST 是 Representational State Transfer 的缩写,是一种设计和组织 Web 应用程序 API 的架构风格。

    9 个月前
  • React Native 结合 Redux 教程

    React Native 是一个强大的跨平台移动应用开发框架,而 Redux 是一个流行的状态管理库。结合 React Native 和 Redux 可以帮助开发人员更好地组织和管理应用程序的状态,提...

    9 个月前
  • ES8 入门教程:新一代异步编程用 async/await

    在 JavaScript 中,异步编程已经成为了一种必要的技能。在 ES6 中,我们可以通过 Promise 来实现异步操作,但是我们仍然需要手动处理回调函数、错误处理以及一些其他问题。

    9 个月前
  • SSE 服务器端推送管理技巧

    概述 SSE(Server-Sent Events)是一种用于服务器主动向客户端发送数据的技术。相比于传统的 AJAX 轮询方式,SSE 可以在服务器有新数据时立即将其推送给客户端。

    9 个月前
  • JavaScript 中的排序算法:使用 ECMAScript 2021 实现 merge-sort

    排序算法是计算机科学中的重要概念,它用于将一组数据按照指定的顺序排列。在 JavaScript 中,常见的排序算法包括冒泡排序、插入排序和快速排序等。本文将介绍一种高效的排序算法:merge-sort...

    9 个月前
  • ES11 的最新技巧

    ES11,也被称为 ECMAScript 2020,是 JavaScript 语言的最新版本,它引入了许多新的功能和改进,包括一些非常具有实用价值的技巧,让前端开发变得更加简单、高效和富有表现力。

    9 个月前
  • Cypress 测试自动化中如何处理多窗口问题

    在前端测试中,多窗口问题是一种常见的问题。当我们需要在测试中对多个窗口进行操作时,往往会遇到很多困难。为了解决这个问题,我们可以使用 Cypress 测试自动化工具来进行处理。

    9 个月前
  • Next.js 中使用 CSS Modules 的技巧

    CSS Modules 是一种让 CSS 文件具有模块化特性的方法。它与 Next.js 结合使用可以很好地解决 CSS 全局命名冲突和作用域隔离等问题。在本文中,我们将详细介绍如何在 Next.js...

    9 个月前
  • 封装 Promise 方法并用于公共函数库

    封装 Promise 方法并用于公共函数库 前言 Promise 是 JavaScript 中非常重要的一种异步编程方法,可以很好地解决回调函数嵌套过深的问题,并支持更为灵活的错误处理方式。

    9 个月前

相关推荐

    暂无文章