我使用 Node 和 Express 作为后端,使用 Mongo DB 进行存储。我使用 multer 中间件来存储图像,我遇到了一个问题,问题是当我从本地主机存储图像时,它会保存在我的后端中,并且也会显示在数据库中,但是当我在heroku或任何其他应用程序上部署相同的api时,图像显示在数据库中,但没有存储在我的后端中。我已经在邮递员上测试了代码,可能是什么问题?
以下是我在 Node.js 上的代码:
router.use(express.static(__dirname + 'public'));
let storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
}
})
let upload = multer({ storage: storage })
router.post('/fellows-details', upload.single('image'), async (req, res) => {
const { error } = FellowsDetails(req.body);
if (error) return res.status(400).send({ message: error.details[0].message });
const fellow = new fellowdetails({
name: req.body.name,
details: req.body.details,
image: req.file.filename
})
try {
fellow.save()
res.status(200).send({ message: 'fellows detail saved successfully' })
} catch (err) {
res.status(400).send(err);
}
})
转换为字符串后,存储文件变得很容易
您只需在前端转换图像中的字符串
将图像转换为base64
在您的 api 中使用此代码的字符串,也不要忘记从上传文件夹中删除文件
"img": new Buffer.from(fs.readFileSync(req.file.path)).toString("base64")
删除文件
let resultHandler = function (err) {
if (err) {
console.log("unlink failed", err);
} else {
console.log("file deleted");
}
}
fs.unlink(req.file.path, resultHandler);
在您的路线进口multer
`multer const multer = require('multer');
const upload = multer({ dest: __dirname + '/uploads/images' });`
Add upload.single('img')
在你的要求中
router.post('/fellows-details', authorize([Role.ADMIN, Role.USER]),
upload.single('img'), usersController.fellowsdetails);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)