如何将数据传递到 multer-gridfs-storage 中间件?
How to Pass Data to a multer-gridfs-storage Middleware?
我正在将一些文件上传到我的 MongoDB 数据库,但目前我的 upload.js 中间件 fileInfo 对象只接受单个静态桶字符串,因为我无法动态更改 bucketName 字符串。如何向 upload.js 中间件传递任何我想要的 bucketName 字符串?
行动:
export const uploadPhoto = (img) => (dispatch) => {
const formData = new FormData();
formData.append("file", img);
const bucketName = "photos"; //HOW DO USE THIS BUCKET NAME IN THE upload.js Middlware?
axios
.post("/video/upload", formData)
.then((res) => {})
.catch((err) => {
console.log(err);
});
};
路线:
const router = require("express").Router();
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = require("mongodb").ObjectId;
const { authUser } = require("../middleware/auth");
const uploadMulter = require("../middleware/upload");
//HOW DO I PASS DATA TO THE uploadMulter Middleware?
router.post("/upload", authUser, uploadMulter, (req, res) => {
console.log(req.file);
});
上传中间件:
const path = require("path");
var mongoose = require("mongoose");
const crypto = require("crypto");
const multer = require("multer");
const { GridFsStorage } = require("multer-gridfs-storage");
const db = require("../config/.env").mongoURI;
const storage = new GridFsStorage({
url: db,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString("hex") + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: "HOW DO I CHANGE THE BUCKETNAME?", //<--?
metadata: {
author: req.user._id,
},
};
resolve(fileInfo);
});
});
},
});
const upload = multer({ storage });
module.exports = upload.single("file");
我使用了 URL 中的参数,但我确信有更好的解决方案。
行动:
export const uploadPhoto = (img, bucketName) => (dispatch) => {
const formData = new FormData();
formData.append("file", img);
axios
.post(`/video/upload/${bucketName}`, formData)
.then((res) => {})
.catch((err) => {
console.log(err);
});
};
路线:
const router = require("express").Router();
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = require("mongodb").ObjectId;
const { authUser } = require("../middleware/auth");
const uploadMulter = require("../middleware/upload");
router.post("/upload/*", authUser, uploadMulter, (req, res) => {
console.log(req.file);
});
上传中间件:
const path = require("path");
var mongoose = require("mongoose");
const crypto = require("crypto");
const multer = require("multer");
const { GridFsStorage } = require("multer-gridfs-storage");
const db = require("../config/.env").mongoURI;
const storage = new GridFsStorage({
url: db,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString("hex") + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: req.params[0], //Heres my solution, but its not the best.
metadata: {
author: req.user._id,
},
};
resolve(fileInfo);
});
});
},
});
const upload = multer({ storage });
module.exports = upload.single("file");
我正在将一些文件上传到我的 MongoDB 数据库,但目前我的 upload.js 中间件 fileInfo 对象只接受单个静态桶字符串,因为我无法动态更改 bucketName 字符串。如何向 upload.js 中间件传递任何我想要的 bucketName 字符串?
行动:
export const uploadPhoto = (img) => (dispatch) => {
const formData = new FormData();
formData.append("file", img);
const bucketName = "photos"; //HOW DO USE THIS BUCKET NAME IN THE upload.js Middlware?
axios
.post("/video/upload", formData)
.then((res) => {})
.catch((err) => {
console.log(err);
});
};
路线:
const router = require("express").Router();
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = require("mongodb").ObjectId;
const { authUser } = require("../middleware/auth");
const uploadMulter = require("../middleware/upload");
//HOW DO I PASS DATA TO THE uploadMulter Middleware?
router.post("/upload", authUser, uploadMulter, (req, res) => {
console.log(req.file);
});
上传中间件:
const path = require("path");
var mongoose = require("mongoose");
const crypto = require("crypto");
const multer = require("multer");
const { GridFsStorage } = require("multer-gridfs-storage");
const db = require("../config/.env").mongoURI;
const storage = new GridFsStorage({
url: db,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString("hex") + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: "HOW DO I CHANGE THE BUCKETNAME?", //<--?
metadata: {
author: req.user._id,
},
};
resolve(fileInfo);
});
});
},
});
const upload = multer({ storage });
module.exports = upload.single("file");
我使用了 URL 中的参数,但我确信有更好的解决方案。
行动:
export const uploadPhoto = (img, bucketName) => (dispatch) => {
const formData = new FormData();
formData.append("file", img);
axios
.post(`/video/upload/${bucketName}`, formData)
.then((res) => {})
.catch((err) => {
console.log(err);
});
};
路线:
const router = require("express").Router();
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectId = require("mongodb").ObjectId;
const { authUser } = require("../middleware/auth");
const uploadMulter = require("../middleware/upload");
router.post("/upload/*", authUser, uploadMulter, (req, res) => {
console.log(req.file);
});
上传中间件:
const path = require("path");
var mongoose = require("mongoose");
const crypto = require("crypto");
const multer = require("multer");
const { GridFsStorage } = require("multer-gridfs-storage");
const db = require("../config/.env").mongoURI;
const storage = new GridFsStorage({
url: db,
file: (req, file) => {
return new Promise((resolve, reject) => {
crypto.randomBytes(16, (err, buf) => {
if (err) {
return reject(err);
}
const filename = buf.toString("hex") + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: req.params[0], //Heres my solution, but its not the best.
metadata: {
author: req.user._id,
},
};
resolve(fileInfo);
});
});
},
});
const upload = multer({ storage });
module.exports = upload.single("file");