javascript - Nodejs上传图片req.file未定义
问题描述
试图保存图片。req.body.image 定义为 image.png,upload.single 上没有任何错误发生,但 req.file 未定义。请帮助修复它
app.js:
const express = require("express");
const bodyParser = require("body-parser");
const fs = require("fs");
const path = require("path");
require('dotenv/config');
const models = require("../src/models/models");
const app = express();
const publicDir = path.join(__dirname, "../public");
const viewsDir = path.join(__dirname, "../templates/views");
app.use(express.static(publicDir));
app.use(bodyParser.urlencoded({extended: true}));
app.set("view engine", "hbs");
app.set("views", viewsDir);
app.post('/categories/:id/add', (req, res, next) => {
let categoryId = req.params.id;
console.log(req.body.image); // image.png; there is a file
upload.single('image')(req, res, function (error) {
if (error) {
console.log(`upload.single error: ${error}`);
return res.sendStatus(500);
}
console.log(req.file); // undefined
// ...
});
res.redirect("/categories/" + categoryId)
});
app.listen(3000, () => {
console.log("Server has started")
});
html:
<div class="form-group">
<label for="id-image">Picture:</label>
<input type="file" class="form-control-file" name="image" id="id-image">
</div>
解决方案
我认为您还没有安装 multer 来进行上传。您可以按照以下步骤操作:
npm i multer --save // install it
const express = require("express");
const bodyParser = require("body-parser");
const multer = require('multer'); // include multer
const upload = multer({ dest: 'provide the path for saving' }) //defined upload
const fs = require("fs");
const path = require("path");
require('dotenv/config');
const models = require("../src/models/models");
const app = express();
const publicDir = path.join(__dirname, "../public");
const viewsDir = path.join(__dirname, "../templates/views");
app.use(express.static(publicDir));
app.use(bodyParser.urlencoded({extended: true}));
app.set("view engine", "hbs");
app.set("views", viewsDir);
app.post('/categories/:id/add', upload.single('image'), (req, res, next) => {
console.log(req.file); // here you will get file
// check the path where you are uploading the file
// ...
});
res.redirect("/categories/" + categoryId)
});
app.listen(3000, () => {
console.log("Server has started")
});
您可以在此处查看更多详细信息。
推荐阅读
- c - 在抽象语法树中递归执行管道
- python - 代理请求没有得到执行
- xamarin - 在 xmlns 中找不到类型 Page1
- xml - 记住或使用先前迭代中的变量值 - xsl 中的有状态编程
- javascript - 如何读取存储在 oracle SQL BLOB 中的图像?
- javascript - 如何使用 Flask 丑化 ES6 javascript?
- gradle - Kotlin js 没有从 gradle 实现中获取依赖项(构建文件中的 npm 部分
- python - Python 和多处理
- c++ - 特征复数矩阵向量乘法
- odata - Azure 搜索 - GeographyPoint 的查询集合