下面我将为你详细讲解“Node.js + express实现上传大文件的方法分析【图片、文本文件】”的完整攻略。
一、背景介绍
在web开发中,经常会需要上传大文件,例如图片、文本文件等,Node.js提供了处理文件上传的模块,其中最常用的就是multer中间件。multer中间件可以让我们轻松处理上传文件时产生的数据,同时也支持客户端上传多个文件。下面我将为你介绍在Node.js使用express和multer中间件实现上传大文件的方法。
二、准备工作
- 安装Node.js和express
- 在项目中安装multer和body-parser中间件,可以通过命令
npm install multer body-parser --save
来安装
三、实现流程
下面是实现上传大文件的具体步骤。
3.1. 引入中间件
在代码中引入express、multer和body-parser三个中间件。
const express = require('express')
const bodyParser = require('body-parser')
const multer = require('multer')
const app = express()
3.2. 设置上传文件的临时目录和文件名设置
在代码中设置上传文件的临时目录和文件名设置,这里我将上传的文件存储在项目根目录下的uploads文件夹中。
// 上传文件的存储配置
var storage = multer.diskStorage({
// 上传文件保存的目录,如果目录不存在会自动创建
destination: function (req, file, cb) {
cb(null, './uploads/')
},
// 上传文件的文件名
filename: function (req, file, cb) {
var changedName = (new Date().getTime()) + '-' + file.originalname;
cb(null, changedName)
}
});
3.3. 设置上传文件的限制条件
在代码中设置上传文件的大小和类型限制条件。
//上传文件大小限制
var limits = {
fileSize: 1024 * 1024 * 10
}
//上传文件类型限制
var fileFilter = function (req, file, cb) {
if (file.mimetype === 'image/png' || file.mimetype === 'image/jpg' || file.mimetype === 'image/jpeg' || file.mimetype === 'text/plain' || file.mimetype === 'application/pdf') {
return cb(null, true)
}
cb(null, false)
}
3.4. 设置路由和接口
在代码中设置路由和接口,用于接收客户端上传的文件并存储。
//设置路由和接口
app.post('/upload', upload.single('file'), function (req, res, next) {
var file = req.file;
if (!file) {
res.json({
code: 404,
msg: '上传失败,未选择文件!'
})
return;
} else {
res.json({
code: 200,
data: {
filename: file.filename,
path: 'http://localhost:3000/' + file.path
},
msg: '上传成功!'
})
return;
}
})
3.5. 启动服务
在代码中启动服务,监听3000端口。
app.listen(3000, () => {
console.log('server is running on port 3000')
})
到这里,Node.js + express实现上传大文件的方法便已经讲解完毕了。下面我将通过两个示例来说明如何在具体项目中实现上传大文件的方法。
示例1:上传图片文件
以下是使用Node.js + express实现上传图片文件的具体代码:
const express = require('express')
const bodyParser = require('body-parser')
const multer = require('multer')
const app = express()
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
//上传文件的存储配置
var storage = multer.diskStorage({
//上传文件保存的目录,如果目录不存在会自动创建
destination: function (req, file, cb) {
cb(null, './uploads/')
},
//上传文件的文件名
filename: function (req, file, cb) {
var changedName = (new Date().getTime()) + '-' + file.originalname;
cb(null, changedName)
}
});
//限制上传文件大小和类型
var limits = {
fileSize: 1024 * 1024 * 5
}
var fileFilter = function (req, file, cb) {
if (file.mimetype === 'image/png' || file.mimetype === 'image/jpg' || file.mimetype === 'image/jpeg') {
return cb(null, true)
}
cb(null, false)
}
//上传文件初始化
var upload = multer({
storage: storage,
limits: limits,
fileFilter: fileFilter
});
//设置路由和接口
app.post('/upload', upload.single('file'), function (req, res, next) {
var file = req.file;
if (!file) {
res.json({
code: 404,
msg: '上传失败,未选择文件!'
})
return;
} else {
res.json({
code: 200,
data: {
filename: file.filename,
path: 'http://localhost:3000/' + file.path
},
msg: '上传成功!'
})
return;
}
})
//启动服务
app.listen(3000, () => {
console.log('server is running on port 3000')
})
在客户端上传图片文件时,只需要发送一个POST请求,请求的URL为http://localhost:3000/upload,请求的Body中需要包含文件,文件的FormData格式如下:
<form enctype="multipart/form-data" method="post">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
示例2:上传文本文件
以下是使用Node.js + express实现上传文本文件的具体代码:
const express = require('express')
const bodyParser = require('body-parser')
const multer = require('multer')
const app = express()
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
//上传文件的存储配置
var storage = multer.diskStorage({
//上传文件保存的目录,如果目录不存在会自动创建
destination: function (req, file, cb) {
cb(null, './uploads/')
},
//上传文件的文件名
filename: function (req, file, cb) {
var changedName = (new Date().getTime()) + '-' + file.originalname;
cb(null, changedName)
}
});
//限制上传文件大小和类型
var limits = {
fileSize: 1024 * 1024 * 5
}
var fileFilter = function (req, file, cb) {
if (file.mimetype === 'text/plain' || file.mimetype === 'application/pdf') {
return cb(null, true)
}
cb(null, false)
}
//上传文件初始化
var upload = multer({
storage: storage,
limits: limits,
fileFilter: fileFilter
});
//设置路由和接口
app.post('/upload', upload.single('file'), function (req, res, next) {
var file = req.file;
if (!file) {
res.json({
code: 404,
msg: '上传失败,未选择文件!'
})
return;
} else {
res.json({
code: 200,
data: {
filename: file.filename,
path: 'http://localhost:3000/' + file.path
},
msg: '上传成功!'
})
return;
}
})
//启动服务
app.listen(3000, () => {
console.log('server is running on port 3000')
})
在客户端上传文本文件时,只需要发送一个POST请求,请求的URL为http://localhost:3000/upload,请求的Body中需要包含文件,文件的FormData格式如下:
<form enctype="multipart/form-data" method="post">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
以上就是使用Node.js + express实现上传大文件的方法分析,希望对你有帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node.js + express实现上传大文件的方法分析【图片、文本文件】 - Python技术站