node.js实现文件上传

本文介绍了如何在Node.js的Express框架下,利用multer和connect-multiparty中间件实现文件上传功能。通过创建表单和设置文件上传接口,将文件保存到项目下的tmp文件夹。在使用multer时,注意处理文件后缀名问题,而connect-multiparty则需要手动创建目标文件夹并写入上传文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

node.js实现文件上传

基于node.js express框架,借助multer或connect-multiparty中间件,我们可以实现一个文件上传功能。

下面将利用node.js express框架实现一个文件上传功能,并将上传的文件储存在项目下的tmp文件夹中:

1、使用multer中间件实现

multer中间件是用来处理multiparty/form-data类型的表单数据,用于文件上传

实现细节:

// 初始化项目
npm init
// 安装需要的模块
npm install --save express body-parser multer

项目结构:

在这里插入图片描述
在public下的index.html实现一个表单:

<form action="http://127.0.0.1:3000/fileUpload" method="POST" enctype="multipart/form-data">
  <label for="file">上传文件:</label>
  <input type="file" name="file" id="file"><br />
  <input type="submit" value="提交">
</form>

文件上传接口:

const express = require('express')
const app = express()
const fs = require('fs')
const pathLib = require('path')
// 引入body-parser中间件,用来处理post请求体body中的数据
const bodyParser = require('body-parser')
// 引入multer中间件,用于处理上传的文件数据
const multer = require('multer')

const server = app.listen(3000, function(){
  console.log('express + multer 实现文件上传')
})

// 读取静态资源
app.use(express.static('public'))
// 通过配置multer的dest属性, 将文件储存在项目下的tmp文件中
app.use(multer({ dest: './tmp/' }).any())

// 访问index.html页面
app.get('/index.html', function(req, res){
  // 将public下的index.html文件返回去
  res.sendFile(__dirname + '/index.html')
})

// 文件上传接口
app.post('/fileUpload', function(req, res){
  // 上传的文件在req.files中
  const filename = req.files[0].path + pathLib.parse(req.files[0].originalname).ext
  fs.rename(req.files[0].path, filename, function(err){
    if(err){
      res.send(err)
    }else{
      res.send('upload successfully')
    }
  })
})

执行node app.js代码,在浏览器中访问localhost:3000打开文件上传页面,文件上传成功后,在项目下会出现tmp文件夹,里面就是上传的文件;

在这里插入图片描述
需要注意的是:文件上传接口在接收到的文件req.files[0]的文件名和路径均不带文件后缀名,为了可以上传的文件可以正常访问,我们需要通过fspath模块处理

2、使用connect-multiparty中间件实现

const express = require('express')
const app = express()
const fs = require('fs')
const multipart = require('connect-multiparty')
const multipartMiddleware = multipart()
const server = app.listen(3000, function(){
  console.log('express connet-multiparty实现文件上传')
})

app.use(express.static('public'))

app.get('/index.html', function(req, res){
  res.sendFile(__dirname + '/index.html')
})

app.post('/fileUpload', multipartMiddleware, function(req, res){
  console.log(req.files)
  const pathDir = __dirname + '/tmp/' + req.files.file.originalFilename
  // 通过fs模块将上传的文件写入进去tmp文件夹
  fs.readFile(req.files.file.path, function (err, data) {
    fs.writeFile(pathDir, data, function (err) {
      if (err) {
        res.send(err)
      } else {
        res.send('upload successfully')
      }
    })
  })
})

网上看了很多人说可以通过往multipart({ uploadDir : './tmp'})来改变上传文件的路径,我试了一下发现不行,会报错,于是就自己在项目下新建一个tmp文件夹,然后通过fs模块将上传的文件写入进去;

参考文献:

[1] node.js学习之post文件上传 (multer中间件)
[2] node.js实现formdata上传文件
[3] Nodejs express 文件上传
[4] 使用multer模块上传文件到服务器
[5] nodejs 实现简单的文件上传功能

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值