Javascript Multer正在尝试创建一个新文件夹,但该文件夹已存在
我使用Multer管理图像上传,当我在本地机器上运行我的应用程序时,一切都很好。但现在我正试图部署到Heroku,我的应用程序日志中出现了以下错误: 未处理的拒绝错误:EROFS:只读文件系统,mkdir “/公众” …这似乎是在尝试创建一个目录,而不是使用现有的目录(就像在我的本地计算机上一样) 这是我为Multer使用的代码:Javascript Multer正在尝试创建一个新文件夹,但该文件夹已存在,javascript,express,heroku,multer,Javascript,Express,Heroku,Multer,我使用Multer管理图像上传,当我在本地机器上运行我的应用程序时,一切都很好。但现在我正试图部署到Heroku,我的应用程序日志中出现了以下错误: 未处理的拒绝错误:EROFS:只读文件系统,mkdir “/公众” …这似乎是在尝试创建一个目录,而不是使用现有的目录(就像在我的本地计算机上一样) 这是我为Multer使用的代码: var storage = multer.diskStorage({ destination: (req, file, cb) => { cb(
var storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'public/img/') },
filename: (req, file, cb) => {
cb(null, new Date().toISOString() + file.originalname)
} })
var upload = multer({storage: storage})
router.post('/:propertyid', upload.single('img'), function(req, res) {
Property.update({
img: req.file.filename
}, {
where: {
id: req.params.propertyid,
}
}).then(updatedProperty => {
res.redirect('/admin/' + updatedProperty)
})
});
public/img目录已经存在,在测试它时,它使用正确的文件名运行良好,并且最终位于正确的位置。感谢您的帮助!谢谢 Heroku dynos有一个短暂的文件系统。乃缦纽伯德的回答很好地解释了这意味着什么 TL;博士:
Dynos的文件系统不应用于存储除部署内容之外的任何永久存储或数据。为了使用存储,.您可以使用
fs extra
来创建文件夹,它将同步并创建如下所示的文件夹。下面的代码中我正在通过user\u id创建目录
并上载多个图像,因此我在代码中使用了fs.mkdirsSync(path)
let fs = require('fs-extra');
let storage = multer.diskStorage({
destination: function (req, file, cb) {
let Id = req.body.id;
let path = `tmp/daily_gasoline_report/${Id}`;
fs.mkdirsSync(path);
cb(null, path);
},
filename: function (req, file, cb) {
// console.log(file);
let extArray = file.mimetype.split("/");
let extension = extArray[extArray.length - 1];
cb(null, file.fieldname + '-' + Date.now() + "." + extension);
}
})