#javascript #node.js #reactjs #multer #cloudinary
#javascript #node.js #reactjs #мультер #cloudinary
Вопрос:
Я работаю над проектом в React и столкнулся с проблемой, которая поставила меня в тупик.
Я хочу загрузить свой файл в cloudinary, а также хочу проверить свой тип файла и тип mime, но столкнувшись с этой ошибкой, это мой код
итак, вот мой код, и я не могу отфильтровать тип файла.
если у кого-то есть какое-то решение, будет действительно здорово, если вы мне поможете
const multer = require("multer");
const DatauriParser = require("datauri/parser");
const path = require("path");
const fs = require("fs");
const dontenv = require("dotenv");
dontenv.config({ path: "config.env" });
let storage;
let dataUri;
const parser = new DatauriParser();
if (process.env.STORAGE_TYPE == "cloud") {
storage = multer.memoryStorage();
dataUri = (req) =>
parser.format(
path.extname(req.file.originalname).toString(),
req.file.buffer
);
} else {
dataUri = {};
storage = multer.diskStorage({
destination: function (req, file, cb) {
var directory = process.env.STORAGE;
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory);
}
cb(null, directory);
},
filename: function (req, file, cb) {
cb(
null,
file.fieldname
"-"
Date.now()
"."
file.originalname.split(".")[1]
);
},
fileFilter: function (req, file, cb) {
checkFileType(file, cb);
},
});
function checkFileType(file, cb) {
// Allowed ext
const filetypes = /jpeg|jpg|png|gif/;
// Check ext
const extname = filetypes.test(
path.extname(req.file.originalname).toString()
);
// Check mime
const mimetype = filetypes.test(file.mimetype);
if (mimetype amp;amp; extname) {
return cb(null, true);
} else {
cb("Error: Images Only!");
}
}
// to Check File TYpe
}
const multerUploads = multer({ storage: storage }).single("imageUrl");
module.exports = { multerUploads, dataUri };
Я понятия не имею, почему это происходит, если кто-нибудь испытал это, я был бы благодарен.
Ответ №1:
Прежде всего fileFilter
, это не ключ diskStorage
, это ключ самого multer. Кроме того, вы объявили функцию внутри else
. Таким образом, проверка типа файла с помощью multer должна быть такой:
const multer = require("multer");
const DatauriParser = require("datauri/parser");
const path = require("path");
const fs = require("fs");
const dontenv = require("dotenv");
dontenv.config({ path: "config.env" });
let storage;
let dataUri;
const parser = new DatauriParser();
if (process.env.STORAGE_TYPE == "cloud") {
storage = multer.memoryStorage();
dataUri = (req) =>
parser.format(
path.extname(req.file.originalname).toString(),
req.file.buffer
);
} else {
dataUri = {};
storage = multer.diskStorage({
destination: function (req, file, cb) {
var directory = process.env.STORAGE;
if (!fs.existsSync(directory)) {
fs.mkdirSync(directory);
}
cb(null, directory);
},
filename: function (req, file, cb) {
cb(
null,
file.fieldname
"-"
Date.now()
"."
file.originalname.split(".")[1]
);
}
});
// to Check File TYpe
}
function checkFileType(file, cb) {
// Allowed ext
const filetypes = /jpeg|jpg|png|gif/;
// Check ext
const extname = filetypes.test(
path.extname(file.originalname).toString()
);
// Check mime
const mimetype = filetypes.test(file.mimetype);
if (mimetype amp;amp; extname) {
return cb(null, true);
} else {
cb("Error: Images Only!");
}
}
const multerUploads = multer({
storage: storage,
fileFilter: function (req, file, cb) {
checkFileType(file, cb);
},
}).single("imageUrl");
module.exports = { multerUploads, dataUri };