gpt4 book ai didi

node.js - Express Multer req.files 未定义

转载 作者:太空宇宙 更新时间:2023-11-04 01:50:52 26 4
gpt4 key购买 nike

每当我上传图像时,req.files 都会返回未定义。这是我的代码:

 var upload123 = multer({
dest: path.join(__dirname, 'public/upload/temp'),
});

app.post(upload123);

这是 HTML:

<form action="/images" method="POST" enctype="multipart/form-data">
<div class="panel-body form-horizontal">
<div class="form-group col-md-12">
<label for="file" class="col-md-2 control-label">Browse:</label>
<div class="col-md-10">
<input type="file" class="form-control" id="file" name="file">
</div>
</div>

这是我尝试访问 req.files 的 Controller :

create(req, res) {
const saveImage = function() {
const possible = 'abcdefghijklmnopqrstuvwxyz0123456789';
let imgUrl = '';

for(let i = 0; i < 6; i++) {
imgUrl += possible.charAt(Math.floor(Math.random() * possible.length));
}

Models.Image.find({ filename: imgUrl }, (err, images) => {
if (images.length > 0) saveImage();
else {
var tempPath = req.files.file.path,
ext = path.extname(req.files.file.name).toLowerCase(),
targetPath = path.resolve(`./public/upload/${ imgUrl }${ ext }`);

if (ext === '.png' || ext === '.jpg' || ext === '.jpeg' || ext === '.gif') {
fs.rename(tempPath, targetPath, (err) => {
if (err) throw err;
var newImg = new Models.Image({
title: req.body.title,
description: req.body.description,
filename: imgUrl + ext
});

newImg.save((err, image) => {
res.redirect(`/images/${image.uniqueId}`);
});
});
} else {
fs.unlink(tempPath, () => {
if (err) throw err;
res.json(500, {error: 'Only image files are allowed'});
})
}
}
});

}

saveImage();

}

我正在使用 Express 版本 4.16.3 和 Multer 1.3.0。我检查了文档,但无法弄清楚如何在 Multer 中简单地提供 dest 选项。请帮忙,我是 Nodejs 新手

最佳答案

这是正常工作的代码示例:

const multer = require('multer');
const storage = multer.memoryStorage();
const fileUpload = multer({storage});

app.use('/*', fileUpload.single('file'));

如果您在应用程序的开头有这个,并且您将 Controller 放在这个中间件之后,那么在 req.file 中您将拥有文件

最好的事情是它直接存储在内存中,而不是存储在某个文件中,因此您不必从文件系统加载它。 (这也更安全,特别是当您将应用程序部署到某些云服务和容器时,这使其不那么明显)

<小时/>

如果您坚持使用“磁盘文件”解决方案,根据官方文档:https://www.npmjs.com/package/multer你应该这样使用它:

  var upload123 = multer({
dest: path.join(__dirname, 'public/upload/temp'),
});

app.post('/endpoint/to/upload/photos', upload123.single('file'), controller.handleImage);

关于node.js - Express Multer req.files 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49732301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com