广告
返回顶部
首页 > 资讯 > 前端开发 > 其他 >node项目中如何使用express来处理文件的上传
  • 647
分享到

node项目中如何使用express来处理文件的上传

nodenodejsExpress文件上传 2023-05-14 22:05:05 647人浏览 独家记忆
摘要

怎么处理文件上传?下面本篇文章给大家介绍一下node项目中如何使用express来处理文件的上传,希望对大家有所帮助!上传单个文件我们可以使用 express 官方出品的第三方中间件 multer 来处理,先是安装:npm i multer

怎么处理文件上传?下面本篇文章给大家介绍一下node项目中如何使用express来处理文件的上传,希望对大家有所帮助!

node项目中如何使用express来处理文件的上传

上传单个文件

我们可以使用 express 官方出品的第三方中间件 multer 来处理,先是安装:

npm i multer

然后我先放段比较完整的代码,之后解释:

const express = require('express')
const multer = require('multer')
const app = express()

const upload = multer({ dest: './uploads' })

app.post('/upload', upload.single('file'), (req, res) => {
  console.log(req.file)
  res.end('上传成功')
})

app.listen(4396, () => {
  console.log('服务器开启')
})

引入后的 multer 为一个函数,执行它得到 upload 对象,执行时可以传入配置,比如设置 dest (destination 的缩写) 为 './uploads',用于指定上传后的文件的存放位置: 【相关教程推荐:nodejs视频教程、编程教学】

const upload = multer({ dest: './uploads' })

由于对上传文件的处理并不是普遍需要的,所以对 upload 的使用是直接在匹配上传路径(我们定义为 '/upload')和方法(一般为 POST)的 app.post('/upload', ) 内,处理的是单个文件上传,所以使用 upload.single() 方法,传入的 'file'(自定义,也可以为其它名字) 为上传文件时的 key:

1.png

其执行会返回一个中间件函数,将得到的文件的数据赋值到 req.file,而文本字段的信息则会放在 req.body 中,并调用 next(),这样我们就可以接着注册一个中间件,打印查看文件信息,并向客户端返回请求结果 :

app.post('/upload', upload.single('file'), (req, res) => {
  console.log(req.body)
  console.log(req.file)
  res.end('上传成功')
})

发起上传请求后,打印得到的 req.body 如下:

[Object: null prototype] { name: 'jay' }

注意,如果请求的 body 使用 fORM-data 格式携带的数据里没有文件,而仅仅是一些文本字段,则 upload.single('file') 可以换成 upload.any()

打印得到的 req.file 如下:

{
  fieldname: 'file',
  originalname: '1.png',
  encoding: '7bit',
  mimetype: 'image/png',
  destination: './uploads',
  filename: '4c5781db70269d90cc57249e95a28894',
  path: 'uploads\\4c5781db70269d90cc57249e95a28894',
  size: 904454
}

并且文件会存储在 uploads 目录下:

2.png

可以看到,文件名为哈希值,且没有后缀,在 vscode 里无法直接查看图片:

3.png

但图片文件是可用的,使用 ps 是可以直接打开查看的。那如果想让文件存储时的文件名是添加后缀的,要怎么办呢?解决方案是在执行 const upload = multer() 时,传入的配置对象不再设置 dest 的值而改为设置 storage

const storage = multer.diskStorage({
  destination(req, file, cb) {
    cb(null, './uploads')
  },
  filename(req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname)
  }
})
const upload = multer({ storage })

storage 对象由 multer.diskStorage() 生成,其内部传入对象,该对象有两个方法属性,它们都有 3 个参数,请求对象 req,文件信息 file,和一个回调函数 cb

  • destination 就是配置文件存储路径的,其作用等同于之前直接往 multer() 传入的 { dest: './uploads' },存储路径通过 cb 的第二个参数传入,cb 的第一个参数可以传 Error 对象或直接传 null
  • filename 就可以用来自定义文件名,因为 file.originalname 也就是上传的文件的原来的文件名,其是带有后缀的,所以我们在它前面加个时间戳来作为存储时的文件名。

现在再次发送上传文件请求,存储到 uploads 目录下的文件就有带后缀名了,可以直接在 vscode 打开查看:

4.png

上传多个文件

如果请求一次性上传多个文件,则只需要将 upload.single('file') 替换为 upload.array('files', 3) 即可,传入参数意为上传时文件的 key 为 files(自定义的,也可以是其它名字),并且限制最多上传 3 张图片,得到的文件信息可以在下一个中间件函数的 req.files 获取:

app.post('/upload', upload.array('files', 3), (req, res) => {
  console.log(req.files)
  res.end('上传成功')
})

当我们一次上传多个文件时:

5.png

打印 req.files 得到的就是个数组了:

[
  {
    fieldname: 'files',
    originalname: '1.png',
    encoding: '7bit',
    mimetype: 'image/png',
    destination: './uploads',
    filename: '1676958850980-1.png',
    path: 'uploads\\1676958850980-1.png',
    size: 904454
  },
  {
    fieldname: 'files',
    originalname: 'qrcode.png',
    encoding: '7bit',
    mimetype: 'image/png',
    destination: './uploads',
    filename: '1676958850986-qrcode.png',
    path: 'uploads\\1676958850986-qrcode.png',
    size: 1076
  }
]

将文件部署为静态资源

可以使用内置的 express.static('./uploads') 中间件函数将存储上传文件的 uploads 目录设置为静态资源。然后传给 app.use()

app.use(express.static('./uploads'))

这样我们就可以直接通过浏览器查看上传得到的文件了,比如 uploads 有张图片如下:

6.png

只需要在浏览器输入 localhost:4396/1677031777791-1.png 即可查看。

以上就是node项目中如何使用express来处理文件的上传的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: node项目中如何使用express来处理文件的上传

本文链接: https://www.lsjlt.com/news/207153.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • node项目中如何使用express来处理文件的上传
    怎么处理文件上传?下面本篇文章给大家介绍一下node项目中如何使用express来处理文件的上传,希望对大家有所帮助!上传单个文件我们可以使用 express 官方出品的第三方中间件 multer 来处理,先是安装:npm i multer...
    99+
    2023-05-14
    node nodejs Express 文件上传
  • node项目中怎么使用express来处理文件的上传
    这篇文章主要介绍“node项目中怎么使用express来处理文件的上传”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“node项目中怎么使用express来处理文件的上传”文章能帮助大家解决问题。上传...
    99+
    2023-07-05
  • Node中http模块如何处理文件上传
    本文小编为大家详细介绍“Node中http模块如何处理文件上传”,内容详细,步骤清晰,细节处理妥当,希望这篇“Node中http模块如何处理文件上传”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。查看请求数据如果我...
    99+
    2023-07-05
  • 在EasyUI项目中使用FileBox控件实现文件上传处理
    在EasyUI项目中使用FileBox控件实现文件上传处理,可以按照以下步骤进行操作:1. 引入EasyUI的相关文件,包括easy...
    99+
    2023-09-02
    EasyUI
  • 如何使用express+multer实现node中的图片上传功能
    小编给大家分享一下如何使用express+multer实现node中的图片上传功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容介绍如下所示:在前端中,我们使用ajax来异步上传图...
    99+
    2022-10-19
  • node.js如何使用express-fileupload中间件实现文件上传
    本篇内容介绍了“node.js如何使用express-fileupload中间件实现文件上传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!目...
    99+
    2023-06-20
  • 如何使用批处理上传文件到ftp目录下
    小编给大家分享一下如何使用批处理上传文件到ftp目录下,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为了快速将项目中开发的补丁程序通过ftp快速上传到linux下...
    99+
    2023-06-08
  • Python 中如何处理 Spring 的文件上传?
    Spring 是一个流行的 Java 开发框架,它提供了很多强大的功能,其中包括文件上传。在 Spring 中,文件上传是一个非常常见的操作,因为很多应用程序需要允许用户上传文件,例如图片、音频、视频等等。在本文中,我们将介绍如何使用 P...
    99+
    2023-09-04
    文件 关键字 spring
  • 在java项目中使用Demo如何实现一个文件上传功能
    在java项目中使用Demo如何实现一个文件上传功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。说到文件上传我们要做到:引入两个包:commons-fileupload-1....
    99+
    2023-05-31
    文件上传 demo java
  • 在Java项目中使用WebUploader如何实现一个文件上传功能
    本篇文章为大家展示了在Java项目中使用WebUploader如何实现一个文件上传功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。之前自己写小项目的时候也碰到过文件上传的问题,没有找到很好的解决方...
    99+
    2023-05-31
    java webuploader 文件上传
  • 如何在PHP中使用Windows系统的HTTP响应来处理文件上传?
    在PHP开发中,文件上传是非常常见的需求。而在Windows系统中,可以使用HTTP响应来处理文件上传,这种方式可以简化代码,提高处理效率,本文将为您详细介绍如何在PHP中使用Windows系统的HTTP响应来处理文件上传。 一、Wind...
    99+
    2023-07-06
    http windows 响应
  • 在Java项目中使用fileupload组件如何实现一个文件上传功能
    本篇文章给大家分享的是有关在Java项目中使用fileupload组件如何实现一个文件上传功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。使用fileupload组件的原因:...
    99+
    2023-05-31
    java fileupload 文件上传
  • 如何使用NPM管理Java项目中的文件?
    NPM是Node.js的包管理工具,它可以帮助我们管理Java项目中的依赖包和文件。在本文中,我们将会讲解如何使用NPM管理Java项目中的文件。 一、安装NPM 在使用NPM之前,我们需要先安装它。如果您已经安装了Node.js,那么NP...
    99+
    2023-07-29
    leetcode npm 文件
  • 如何在 Linux 上使用 Git 管理 Java 项目的日志文件?
    在开发 Java 项目的过程中,日志文件扮演着非常重要的角色。通过日志文件,我们可以了解应用程序的运行状态和异常情况,也可以帮助我们进行调试和排查问题。而在开发过程中,我们通常会使用 Git 进行版本控制,以便更好地管理和追踪代码的变化。...
    99+
    2023-08-17
    linux 日志 git
  • 如何在Unix上使用npm来管理ASP项目的依赖项?
    在Unix系统上,使用npm来管理ASP项目的依赖项是一个非常方便和有效的方法。npm是一个Node.js软件包管理器,它可以自动帮助我们下载并安装所需的软件包和依赖项。本文将介绍如何在Unix上使用npm来管理ASP项目的依赖项。 一、安...
    99+
    2023-06-16
    npm 学习笔记 unix
  • 如何使用Python处理Linux系统上的文件和目录?
    Python是一种高级编程语言,它可以轻松地处理Linux系统上的文件和目录。在本文中,我们将介绍如何使用Python来处理Linux系统上的文件和目录,以及如何使用Python编写脚本来自动完成文件和目录操作。 一、Python处理Lin...
    99+
    2023-08-25
    npm 数据类型 linux
  • 如何在Linux系统中使用Git来管理PHP项目的文件路径?
    Linux系统是开源、免费的操作系统,因其稳定性和安全性而被广泛使用。而Git则是一个非常流行的版本控制系统,被广泛用于开发中。在Linux系统中使用Git来管理PHP项目的文件路径,可以提高项目的可维护性和可扩展性,同时也能够更好地协作开...
    99+
    2023-09-01
    path linux git
  • 如何在Java项目中利用FasfDFS实现一个文件上传下载功能
    本篇文章给大家分享的是有关如何在Java项目中利用FasfDFS实现一个文件上传下载功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一 : 添加配置文件当完成以上操作之后可以...
    99+
    2023-05-31
    fasfdfs java ava
  • 如何使用github来管理idea中的项目
    在当今互联网时代,开发人员需要用到许多不同的工具和技术来实现自己的项目和产品。其中,github作为一个开源的代码托管平台,成为了程序员和开发者分享代码和协作开发的重要工具之一。idea作为一款著名的IDE工具,也提供了许多与github集...
    99+
    2023-10-22
  • 如何处理Go语言中的并发文件上传问题
    在Go语言中处理并发文件上传问题时,可以使用goroutine来实现并发上传。下面是一个简单的示例代码:```gopackage m...
    99+
    2023-10-09
    Go语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作