为什么 Multer 在 nodeJS 上产生 errno -4058
Why Multer resulting errno -4058 in on nodeJS
我正在尝试上传图像及其数据。我正在使用 multer 上传图像。但我不断收到这样的错误消息:
{
[Error: ENOENT: no such file or directory, open 'D:\works\fiverr-kiddiemmerce-be\assets\products19-09-13T16:18:26.393Z180911-Naver-x-Dispatch-Yeoreum-cosmic-girls-wjsn-41821990-2000-1333.jpg']
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path:
'D:\works\fiverr-kiddiemmerce-be\assets\products\2019-09-13T16:18:26.393Z180911-Naver-x-Dispatch-Yeoreum-cosmic-girls-wjsn-41821990-2000-1333.jpg',
storageErrors: []
}
我该如何解决这个问题?我一点头绪都没有。这是我到目前为止所做的。
multer.js
const fs = require('fs');
const multer = require(`multer`);
const path = require(`path`);
const productPath = path.join(__dirname, `../../assets/products`);
const storage = multer.diskStorage({
destination: (req, file, cb) => {
if (file.fieldname.includes(`material_image`)) {
cb(null, materialPath);
} else if (file.fieldname.includes(`product_image`)) {
if (!fs.existsSync(productPath)) {
fs.mkdir(productPath, { recursive: true }, (err) => {
console.log(err);
});
}
cb(null, productPath);
}
},
filename: (req, file, cb) => {
cb(null, new Date().toISOString() + file.originalname);
},
});
const filter = (req, file, cb) => {
if (file.mimetype === `image/png` || file.mimetype === `image/jpeg`) {
cb(null, true);
} else {
cb(null, false);
}
};
module.exports = {
upload: multer({
storage : storage,
limits : { fileSize: 720 * 1280 * 5 },
fileFilter : filter,
}),
};
这是 productController.js(我要上传图片的地方)
const { upload } = require(`../utils/multer`);
const multer = require(`multer`);
module.exports = {
store: async (req, res) => {
const img_upload = upload.any();
img_upload(req, res, (err) => {
if (err instanceof multer.MulterError) {
res.end();
return;
} else if (err) {
console.log(`It always goes here`);
console.log(err);
res.end();
return;
}
// Do something if no error
});
}
}
在 windows 中,您不能使用冒号 :
创建文件,因此您必须将冒号替换为破折号 new Date().toISOString().replace(/:/g , "-")
或通过添加 Date.now()
将其更改为时间戳而不是 new Date().toISOString()
我正在尝试上传图像及其数据。我正在使用 multer 上传图像。但我不断收到这样的错误消息:
{
[Error: ENOENT: no such file or directory, open 'D:\works\fiverr-kiddiemmerce-be\assets\products19-09-13T16:18:26.393Z180911-Naver-x-Dispatch-Yeoreum-cosmic-girls-wjsn-41821990-2000-1333.jpg']
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path:
'D:\works\fiverr-kiddiemmerce-be\assets\products\2019-09-13T16:18:26.393Z180911-Naver-x-Dispatch-Yeoreum-cosmic-girls-wjsn-41821990-2000-1333.jpg',
storageErrors: []
}
我该如何解决这个问题?我一点头绪都没有。这是我到目前为止所做的。
multer.js
const fs = require('fs');
const multer = require(`multer`);
const path = require(`path`);
const productPath = path.join(__dirname, `../../assets/products`);
const storage = multer.diskStorage({
destination: (req, file, cb) => {
if (file.fieldname.includes(`material_image`)) {
cb(null, materialPath);
} else if (file.fieldname.includes(`product_image`)) {
if (!fs.existsSync(productPath)) {
fs.mkdir(productPath, { recursive: true }, (err) => {
console.log(err);
});
}
cb(null, productPath);
}
},
filename: (req, file, cb) => {
cb(null, new Date().toISOString() + file.originalname);
},
});
const filter = (req, file, cb) => {
if (file.mimetype === `image/png` || file.mimetype === `image/jpeg`) {
cb(null, true);
} else {
cb(null, false);
}
};
module.exports = {
upload: multer({
storage : storage,
limits : { fileSize: 720 * 1280 * 5 },
fileFilter : filter,
}),
};
这是 productController.js(我要上传图片的地方)
const { upload } = require(`../utils/multer`);
const multer = require(`multer`);
module.exports = {
store: async (req, res) => {
const img_upload = upload.any();
img_upload(req, res, (err) => {
if (err instanceof multer.MulterError) {
res.end();
return;
} else if (err) {
console.log(`It always goes here`);
console.log(err);
res.end();
return;
}
// Do something if no error
});
}
}
在 windows 中,您不能使用冒号 :
创建文件,因此您必须将冒号替换为破折号 new Date().toISOString().replace(/:/g , "-")
或通过添加 Date.now()
将其更改为时间戳而不是 new Date().toISOString()