Express.js 中的文件上传和下载

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

在 Web 应用程序中,文件上传和下载是常见的功能之一。在 Express.js 中,我们可以使用一些中间件和库来处理文件上传和下载。

文件上传

使用 multer 中间件

multer 是一个 Node.js 中间件,用于处理 multipart/form-data 类型的请求,它非常适合处理文件上传。我们可以使用 multer 中间件来处理文件上传。

首先,我们需要安装 multer

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

然后,我们可以在我们的 Express.js 应用程序中使用它:

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

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

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

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

在上面的代码中,我们使用 multer 中间件来处理文件上传。upload.single('file') 表示我们只处理单个文件上传,上传的文件名为 filereq.file 对象包含上传的文件的信息。

处理多个文件上传

如果我们需要处理多个文件上传,可以使用 upload.array('files') 方法,其中 files 表示上传的文件名。在处理多个文件上传时,req.files 对象包含上传的文件的信息数组。

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

限制文件类型和大小

我们可以通过在 multer 中间件中使用 limitsfileFilter 选项来限制文件类型和大小。

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

在上面的代码中,我们使用 limits 选项来限制文件大小为 1 MB。使用 fileFilter 选项来限制文件类型为 image/jpegimage/png

完整的文件上传示例

以下是一个完整的文件上传示例,包括限制文件类型和大小:

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

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

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

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

文件下载

下载文件

在 Express.js 中,我们可以使用 res.download() 方法来下载文件。

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

在上面的代码中,我们使用 res.download() 方法来下载文件 example.txt。文件位于 ./uploads/ 目录下。

下载二进制数据

如果我们需要下载二进制数据,可以使用 res.set() 方法设置响应头,然后使用 res.send() 方法发送二进制数据。

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

在上面的代码中,我们使用 Buffer.from() 方法创建一个包含字符串 Hello, world! 的二进制数据。然后,我们使用 res.set() 方法设置响应头,将响应类型设置为 text/plain,并将文件名设置为 example.txt。最后,我们使用 res.send() 方法发送二进制数据。

完整的文件下载示例

以下是一个完整的文件下载示例:

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

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

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

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

结论

在 Express.js 中,我们可以使用 multer 中间件来处理文件上传,使用 res.download() 方法和 res.send() 方法来处理文件下载和二进制数据下载。我们还可以通过使用 limitsfileFilter 选项来限制文件类型和大小。希望这篇文章能够帮助你处理文件上传和下载。

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


猜你喜欢

  • 从 Node.js 到 Deno 的迁移指南

    Node.js 和 Deno 都是常用的 JavaScript 运行时,用于在开发中运行 JavaScript 应用程序。然而,随着 Deno 发展越来越成熟,许多开发人员开始考虑将其应用于他们的项目...

    8 天前
  • CSS Grid 布局:如何实现斜向网格布局

    在 Web 前端开发中,网格布局是一种广泛使用的布局方式。CSS Grid 是一种新的布局方式,相对于传统的 flexbox 布局和 float 布局,它具有更强的自由度和灵活性。

    8 天前
  • 如何处理响应式设计中的随机内容显示问题?

    背景 随着移动设备的普及,越来越多的网站开始采用响应式设计,以便能够适应不同尺寸的屏幕。响应式设计的一个很大的优点是它能够根据屏幕大小和方向来显示不同的内容,以提供最优的用户体验。

    8 天前
  • 如何使用 Tailwind CSS 创建呈现动画效果的产品循环展示图

    在今天的数字世界中,如何让用户对你的产品或服务留下深刻的第一印象是非常重要的。一个吸引人的产品循环展示图是一个很好的选择。这样的设计不仅能够向用户展示您产品的特点,还能增强用户对您的品牌形象的记忆点。

    8 天前
  • React适配Custom Elements的方式

    导言 React是当前最流行的前端框架之一,而Custom Elements则是Web组件技术规范的一部分。React中使用组件的方式可以提高开发效率和可维护性,而Custom Elements可以实...

    8 天前
  • 解决 React 中 Redux 数组不更新问题

    前言 React 和 Redux 是目前前端开发中最热门的技术之一。Redux 管理着 React 应用程序中的状态,使得应用程序组件脱离了复杂的数据传递,变得更加简洁、可重用和可维护。

    8 天前
  • 如何解决 PM2 启动时遇到的 “Error: listen EINVAL” 问题

    当你使用 PM2 来启动 Node.js 应用时,可能会遇到一个常见的错误:“Error: listen EINVAL”。该错误通常意味着 Node.js 应用试图在不允许的端口上侦听连接,这可能是由...

    8 天前
  • ES8 async/await 详解

    ES8 async/await 是 ES7 中引入的异步编程的新特性,并被广泛使用在现代的前端开发中。通过 async 函数以及 await 关键字,我们可以以同步风格的方式写异步代码。

    8 天前
  • ESLint 的最佳实践:如何避免对代码风格的干扰?

    介绍 ESLint 是一个可扩展的 JavaScript 代码检查工具,在编写 JavaScript 代码时可以检查语法错误和潜在的问题。但是,有时候 ESLint 会干扰代码风格,导致开发者的编码效...

    8 天前
  • ES11(ECMAScript 2020)中的常用新特性和语法

    随着时间的推移,JavaScript语言不断发展和变化,让前端开发人员需要不断学习掌握新的语言特性和语法。2020年,ES11(ECMAScript 2020)发布了一些新特性和语法,让JavaScr...

    8 天前
  • 你的断言库不够用?木有关系 chai 到救你!

    在前端开发中,我们常常需要对某些结果进行断言。虽然很多框架和库都提供了自带的断言函数,但是有时候这些断言函数的覆盖率不够高,无法满足我们的需求。 在这种情况下,我们可以借助 chai 来实现更强大和灵...

    8 天前
  • Docker 常见问题:如何减小镜像

    引言 Docker 已经成为了现代应用程序开发的一种基本工具,它可以让我们快速地创建和部署应用程序。然而,有时候我们会发现 Docker 镜像非常大,占用了很多空间。这对于大型应用程序来说尤为常见。

    8 天前
  • 如何使用 Serverless Framework 构建后端应用程序

    如何使用 Serverless Framework 构建后端应用程序 Serverless Framework 是一款无服务器应用程序开发框架,它可以帮助我们轻松地构建无服务器应用程序,并将应用程序部...

    8 天前
  • 如何在 Angular 中解决 RXJS 6 “Observable.subscribe 中没有运算符” 的错误

    在 Angular 中使用 RXJS 来处理异步事件是非常常见的。然而,在 RXJS 6 中,有一个常见的错误是在 Observable.subscribe 中使用运算符时出现了错误信息“运算符不是 ...

    8 天前
  • Mongoose 数据库操作常见错误及其解决方案

    Mongoose 数据库操作常见错误及其解决方案 引言 Mongoose 是 Node.js 中非常受欢迎的 MongoDB 驱动程序。它提供了方便、易用的 API 来操作 MongoDB 数据库。

    8 天前
  • Cypress 测试之如何处理位置相关的操作?

    在进行前端测试时,处理位置相关的操作是非常重要的。例如,测试页面元素的位置、滚动条的位置、窗口的位置等等。在这篇文章中,我将向你介绍如何使用 Cypress 处理这些位置相关的操作。

    8 天前
  • MySQL 查询性能优化的方法和技巧

    在设计和开发任何复杂的应用程序时,数据库查询是一个关键的方面。查询可能是应用程序性能的瓶颈之一,特别是当数据量很大时。MySQL 是一种常用的关系型数据库管理系统 (RDBMS),查询优化在 MySQ...

    8 天前
  • GraphQL 中如何使用服务器-side rendering?

    随着现代Web应用程序的兴起,前端应用程序的复杂性也在增加。面对过多的数据和功能,前端开发人员不得不采用更高效的工具和技术来进行应用程序开发。 GraphQL是一种用于API开发的查询语言和运行时。

    8 天前
  • SASS 语言结构的详细介绍及使用技巧

    SASS 是一种样式表语言,其完全兼容 CSS 语法,但提供了更多的功能和特性。SASS 语言结构可使开发者更加便捷地创建和维护大型 Web 应用程序的 CSS 样式。

    8 天前
  • Redux 状态管理的艺术

    Redux 是一个 JavaScript 应用程序状态管理库,它使得管理应用程序的状态变得更加容易和可预测。Redux 可以帮助我们更好地维护大型应用程序,让我们能够更好地应对复杂的状态管理问题。

    8 天前

相关推荐

    暂无文章