关于Nodejs实现文件上传的示例代码,我们需要借助Node.js内置的HTTP模块和第三方npm包——multer。下面是实现文件上传的完整攻略:
1.安装和配置multer
在终端中输入以下代码来安装multer:
npm install multer --save
在Node.js中使用multer需要引入之后进行一些配置,以下是在app.js或index.js中进行multer的配置:
const multer = require('multer');
const upload = multer({ dest: 'uploads/' }) //配置文件上传的目标文件夹
multer还包含了更多的配置项,如限制上传的文件大小、可接受的文件类型等。可以查看官方文档进行详细了解。
2.前端页面的代码编写
前端页面代码我们使用HTML和CSS来完成。下面是基本代码:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">上传文件</button>
</form>
其中,enctype="multipart/form-data"
是文件上传时必须的。这里的name="file"
对应下面后端提取文件的name。
3.后端代码剖析
在前端页面中,我们使用了action="/upload"来进行上传操作。在后端中,我们需要监听该地址作出响应。以下是关于上传请求的handle暴露出来的示例代码:
app.post('/upload', upload.single('file'), function (req, res, next) {
// req.file is the `file` file
// req.body will hold the text fields, if there were any
})
upload.single('file')
表示只允许上传一个名为file的文件,如果你允许上传多个文件,可以使用upload.array('file', maxCount)
。
关于如何正确显示上传文件的地址,我们可以使用res.send('文件地址:/uploads/'+req.file.filename);
来进行输出。
接下来,我们可以尝试读取文件并转换为指定格式,最后再输出到前端。以下是如何读取文件并转换为base64的完整代码:
const express = require('express');
const multer = require('multer');
const fs = require('fs');
const path = require('path');
const app = express();
const upload = multer({ dest: 'uploads/' }); //配置文件上传的目标文件夹
app.use(express.urlencoded({ extended: false }));
//返回index页面
app.get('/', function(req, res, next) {
res.sendFile(__dirname + "/views/" + "index.html");
});
//文件上传的接口
app.post('/upload', upload.single('file'), function (req, res, next) {
let filePath = path.resolve(__dirname, req.file.path); //获取上传文件的路径
//读取文件并转为base64格式,返回给前端
fs.readFile(filePath, function (err, data) {
if (err) {
res.send(err);
} else {
let base64img = "data:image/jpeg;base64," + data.toString('base64');
res.send(`<img src=${base64img} />`);
}
fs.unlinkSync(filePath); //删除临时文件夹中的文件
});
});
app.listen(3000, function() {
console.log('Server is running on http://127.0.0.1:3000');
});
以上代码基本上可以满足文件上传的基本需求,并且将文件转换为base64格式的图片返回给前端。第二条示例,在读取成功后对返回前端的图片进行加水印处理再输出。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Nodejs实现文件上传的示例代码 - Python技术站