gpt4 book ai didi

node.js - 使用相同的 POST 请求将文件上传到 MongoDB 和本地服务器

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:38 25 4
gpt4 key购买 nike

我正在尝试制作自己的上传服务,并且我希望能够在我的服务器上的本地文件夹中以及我的 mongoDB 云服务(Atlas)上上传文件。

到目前为止,我已经分别完成了这两项服务,并且它们工作正常(我制作了一个用于将文件上传到 mongo Atlas 的 Node 应用程序,以及另一个用于将文件上传到服务器的 Node 应用程序)。但现在,我想将这两个应用程序统一到一个 Node 应用程序中,在每个 POST 请求之后,文件都会发送到 Atlas 以及本地文件夹。我正在使用 multer 和 gridfs。

第一次尝试是在我的index.html文件上创建两个“文件输入”字段,每个字段都有两个不同的POST请求:一个到'/upload',它将文件发送到Atlas,第二个到'/uploaddisk' 将文件发送到磁盘。但是,第二个发布请求不起作用(每次我想提交文件时它都会抛出错误)。将文件上传到 mongoDB 似乎每次都工作得很好。

有什么想法可以在单个 POST 上执行此操作吗?预先感谢您!

这是我为 server.js 应用程序编写的代码:

//mongo DATA
const dbURI =
"myc-atlas-credentials";
mongoose.Promise = global.Promise;
// mongoose.connect(bdURI, { useNewUrlParser: true, useUnifiedTopology: true });
const conn = mongoose.createConnection(dbURI, {
useNewUrlParser: true,
useUnifiedTopology: true
});

//init gfs
let gfs;

conn.once("open", () => {
//initialize the stream
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection("uploads");
});

//creating the storage engine for MONGO
const storage = new GridFsStorage({
url: dbURI,
file: (req, file) => {
return new Promise((resolve, reject) => {
const filename = file.fieldname + '-' + Date.now() + path.extname(file.originalname);
const fileInfo = {
filename: filename,
bucketName: "uploads"
};
resolve(fileInfo);
});
}
});
const upload = multer({ storage: storage });

//set storage engine with multer for disk
const diskstorage = multer.diskStorage({
destination: function(req, file, cb) {
cb(null, path.join(__dirname + '/uploads/'));
},
filename: function(req, file, cb) {
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
const diskupload = multer({ storage: diskstorage });

//route for POST - upload data to mongo
app.post('/upload', upload.single('file'), (req, res) => {
console.log({ file: req.file });
// res.json({ file: req.file });
res.redirect('/');
});

//route for POST - upload data to disk
app.post('/uploaddisk', diskupload.single('file'), (req, res, next) => {
const file = { file: req.file };
if (!file) {
const error = new Error('Please upload a file');
error.httpStatusCode = 400;
return next(error);
}
res.redirect('/');
});


最佳答案

你可以这样尝试:

function fileUpload(req, res, next) {
upload.single('file')(req, res, next);
diskupload.single('file')(req, res, next);
next();
}

//route for POST - upload data to mongo
app.post('/upload', fileUpload, (req, res) => {
console.log({ file: req.file });
// res.json({ file: req.file });
res.redirect('/');
});

关于node.js - 使用相同的 POST 请求将文件上传到 MongoDB 和本地服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59208987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com