如何在不同的文件中定义多个存储?
How to define multer storage in different file?
我有一个带有 express 的节点应用程序。
服务器位于 server.js,我的路由器设置如下:
app.use('/xyz', xyz);
app.use('/abc', abc);
路由器xyz和abc在/routes
的不同路由模块中。
我想使用 multer 将图像上传到 MongoDB。上传文件的端点是/xyz/upload
storage = new GridFsStorage({
url: process.env.DB_URL,
file: (req, file) => {
return new Promise((resolve, reject) => {
const filename = file.originalname;
const fileInfo = {
filename: filename,
bucketName: 'uploads'
};
resolve(fileInfo);
});
}
});
如何在 xyz 路由器文件中定义此 const upload = multer({ storage });
?
互联网上的所有示例都显示在 server.js 和 app.post() 中定义了 multer。如果我在不同的模块中定义了路由器怎么办?
如果您正在寻找更简洁的架构,那么我建议遵循关注点分离原则 (SoC),并将文件处理中间件放在单独的文件中,如下所示:
const multer = require("multer");
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./public/uploads");
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
cb(
null,
new Date().getTime() + "-" + uniqueSuffix + "-" + file.originalname
);
},
});
const fileFilter = (req, file, cb) => {
// reject all files except jpeg
if (file.mimetype === "image/jpeg") {
cb(null, true);
} else {
cb(null, false);
}
};
module.exports = multer({
storage: storage,
limits: {
fileSize: 1024 * 1024 * 15, // 15mb max size,
},
fileFilter: fileFilter,
});
然后,在你的路由中,如果你正在使用 CommonJS,一个简单的 require 就足够了:
const upload = require("./fileHandling");
server.post(
`/route`,
upload.array('Photos', 6),
controller,
);
它帮了我大忙,希望对你有帮助!
我有一个带有 express 的节点应用程序。 服务器位于 server.js,我的路由器设置如下:
app.use('/xyz', xyz);
app.use('/abc', abc);
路由器xyz和abc在/routes
的不同路由模块中。
我想使用 multer 将图像上传到 MongoDB。上传文件的端点是/xyz/upload
storage = new GridFsStorage({
url: process.env.DB_URL,
file: (req, file) => {
return new Promise((resolve, reject) => {
const filename = file.originalname;
const fileInfo = {
filename: filename,
bucketName: 'uploads'
};
resolve(fileInfo);
});
}
});
如何在 xyz 路由器文件中定义此 const upload = multer({ storage });
?
互联网上的所有示例都显示在 server.js 和 app.post() 中定义了 multer。如果我在不同的模块中定义了路由器怎么办?
如果您正在寻找更简洁的架构,那么我建议遵循关注点分离原则 (SoC),并将文件处理中间件放在单独的文件中,如下所示:
const multer = require("multer");
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./public/uploads");
},
filename: function (req, file, cb) {
const uniqueSuffix = Date.now() + "-" + Math.round(Math.random() * 1e9);
cb(
null,
new Date().getTime() + "-" + uniqueSuffix + "-" + file.originalname
);
},
});
const fileFilter = (req, file, cb) => {
// reject all files except jpeg
if (file.mimetype === "image/jpeg") {
cb(null, true);
} else {
cb(null, false);
}
};
module.exports = multer({
storage: storage,
limits: {
fileSize: 1024 * 1024 * 15, // 15mb max size,
},
fileFilter: fileFilter,
});
然后,在你的路由中,如果你正在使用 CommonJS,一个简单的 require 就足够了:
const upload = require("./fileHandling");
server.post(
`/route`,
upload.array('Photos', 6),
controller,
);
它帮了我大忙,希望对你有帮助!