multer 以奇怪的格式保存图像
multer saves image in a weird format
我正在尝试从我的 Express 服务器向我的客户端提供图像,但 multer 以一种奇怪的格式保存文件,这会导致当我的 React 应用程序尝试渲染图像时出现问题
多个服务器端代码:
const fileFilter = (req, file, cb) => {
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png'){
// accept a file
cb(null, true);
} else {
// reject a file
cb(new Error('Incorrect file'), false);
}
}
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname))
}
});
const upload = multer({
storage: storage,
limits: {
fileSize: 1024 * 1024 * 5 // max 5mb for image size
},
fileFilter: fileFilter
});
router.post('/', upload.single('productImage'), ProductsController.products_create_product);
这段代码成功地在 /uploads
文件夹中创建了文件,但是当我将路径保存到数据库时,我得到了这样的响应:
邮递员
{
"size": 5,
"quantityInStock": 11,
"productImage": "uploads\2021-03-11T19-18-05.442Zvans-2.jpg",
}
我怎样才能更改它以便以这种格式保存图像:/uploads/2021-03-11T19-18-05.442Zvans-2.jpg
您只需要像这样修复您的目标路径:
cb(null, path.join(__dirname, './uploads/'));
对我来说,这是完整的代码块。只需抓住你想要的实际部分:
const multer = require('multer');
const path = require('path');
const appConfigs = require('./../config/app');
module.exports = function (folderName) {
// TODO: console log here and optimize multiple initialization of multer if need
return multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
const filePath = path.join(__dirname, './../uploads/' + folderName);
cb(null, filePath);
},
filename: function (req, file, cb) {
const extension = file.mimetype.split('/')[1];
const fileName = (new Date().getTime() / 1000 | 0) + '.' + extension;
cb(null, fileName);
}
}),
limits: {
fileSize: 1024 * 1024 * appConfigs.image_max_size // MB
},
fileFilter: (req, file, cb) => {
let valid = (file.mimetype === 'image/jpeg' || file.mimetype === 'image/jpg' || file.mimetype === 'image/png');
cb(null, valid);
},
});
};
我正在尝试从我的 Express 服务器向我的客户端提供图像,但 multer 以一种奇怪的格式保存文件,这会导致当我的 React 应用程序尝试渲染图像时出现问题
多个服务器端代码:
const fileFilter = (req, file, cb) => {
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png'){
// accept a file
cb(null, true);
} else {
// reject a file
cb(new Error('Incorrect file'), false);
}
}
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/');
},
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname))
}
});
const upload = multer({
storage: storage,
limits: {
fileSize: 1024 * 1024 * 5 // max 5mb for image size
},
fileFilter: fileFilter
});
router.post('/', upload.single('productImage'), ProductsController.products_create_product);
这段代码成功地在 /uploads
文件夹中创建了文件,但是当我将路径保存到数据库时,我得到了这样的响应:
邮递员
{
"size": 5,
"quantityInStock": 11,
"productImage": "uploads\2021-03-11T19-18-05.442Zvans-2.jpg",
}
我怎样才能更改它以便以这种格式保存图像:/uploads/2021-03-11T19-18-05.442Zvans-2.jpg
您只需要像这样修复您的目标路径:
cb(null, path.join(__dirname, './uploads/'));
对我来说,这是完整的代码块。只需抓住你想要的实际部分:
const multer = require('multer');
const path = require('path');
const appConfigs = require('./../config/app');
module.exports = function (folderName) {
// TODO: console log here and optimize multiple initialization of multer if need
return multer({
storage: multer.diskStorage({
destination: function (req, file, cb) {
const filePath = path.join(__dirname, './../uploads/' + folderName);
cb(null, filePath);
},
filename: function (req, file, cb) {
const extension = file.mimetype.split('/')[1];
const fileName = (new Date().getTime() / 1000 | 0) + '.' + extension;
cb(null, fileName);
}
}),
limits: {
fileSize: 1024 * 1024 * appConfigs.image_max_size // MB
},
fileFilter: (req, file, cb) => {
let valid = (file.mimetype === 'image/jpeg' || file.mimetype === 'image/jpg' || file.mimetype === 'image/png');
cb(null, valid);
},
});
};