Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用mongoose在MongoDB中存储图像_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 使用mongoose在MongoDB中存储图像

Node.js 使用mongoose在MongoDB中存储图像,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我希望使用mongoose库来存储文件,而不是直接将文件存储到mongodb中。如何使用相同的代码框架使用mongoose库 更新::保存在mongoose库中。现在它上载了所有的文件,但是我怎么能只存储docx文件而不是图像文件呢。上传任何其他文件都应该说是无效文件 更新2::已解决此问题。现在只允许docxx文件。现在需要添加文件名和扩展名,如注释部分所述。如何使用这部分代码 中间件::upload.js const util = require("util"); const multer

我希望使用mongoose库来存储文件,而不是直接将文件存储到mongodb中。如何使用相同的代码框架使用mongoose库

更新::保存在mongoose库中。现在它上载了所有的文件,但是我怎么能只存储docx文件而不是图像文件呢。上传任何其他文件都应该说是无效文件

更新2::已解决此问题。现在只允许docxx文件。现在需要添加文件名和扩展名,如注释部分所述。如何使用这部分代码

中间件::upload.js

const util = require("util");
const multer = require("multer");
const GridFsStorage = require("multer-gridfs-storage");
const mongoose = require('mongoose');
const Grid = require('gridfs-stream');

const mongoURI ='mongodb://localhost:27017/file_uploaded';
const promise = mongoose.connect(mongoURI, { useNewUrlParser: true });
const conn = mongoose.connection;
let gfs;

conn.once('open',() => {
  gfs = Grid(conn, mongoose.mongo);
  gfs.collection('uploads');
});


var storage = new GridFsStorage({
  db: promise,
  options: { useNewUrlParser: true, useUnifiedTopology: true },
  file: (req, file) => {
return new Promise((resolve, reject) => {
            if (file.mimetype === 'application/vnd.openxmlformats- 
  officedocument.wordprocessingml.document') {
                resolve({
                    bucketName: 'words'
                })
                ***//Add filename inorder to maintain original final name with 
extention***
                //const filename = `${Date.now()}- 
   bezkoder-${file.originalname}`;
                //return filename;
            } else {
                reject(Error("File type has been rejected"));
            }
        });   
  }
});

var uploadFile = multer({ storage: storage }).single("file");
var uploadFilesMiddleware = util.promisify(uploadFile);
module.exports = uploadFilesMiddleware;

您不需要使用GridFsStorage。试试下面的代码

// file-controller.js

const express = require('express');
const mongoose = require('mongoose');
const multer = require('multer');

const router = express.Router();

const multerStorage = multer.memoryStorage();
const upload = multer({ storage: multerStorage, });

const imageSchema = mongoose.Schema({
    image: { data: Buffer, contentType: String },
}, { timestamps: true });

const ImageModel = mongoose.model('images', imageSchema);

router.post('/upload', upload.single('image'), async (req, res, next) => {
    const image = { data: new Buffer.from(req.file.buffer, 'base64'), contentType: req.file.mimetype }
    const savedImage = await ImageModel.create(image);
    res.send(savedImage);
});

router.get('/getImage/:id', async (req, res, next) => {
    const { id: _id } = req.params;
    // If you dont use lean(), you wont decode image as base64
    const image = await ImageModel.findOne({ _id }).lean().exec();
    res.send(image);
});

module.exports = router;
通过快车提供路线服务

const express = require('express');
const FileController = require('./file-controller');
const app = express();

// Mongo DB connection code ...
// Serve static files code ...

app.use('/file', FileController);

app.listen(3000, () => console.log(`Example app listening on port ${port}!`));

请回答您的问题,以澄清您的具体问题,或添加其他详细信息,以突出显示您所需的内容。你们有并没有尝试过使用?把你们的mimetype改成docx。const match=['application/vnd.openxmlformats officedocument.wordprocessingml.document']我编辑了代码,但仍在上载所有文件类型。我只想要特定的.docx文件,文件的其余部分应该说是无效的文件类型。更新了我的代码,只接受所需的文件类型。现在需要添加文件名以获得自定义文件类型。我已经在注释中编写了代码,但它不起作用。我如何实现它?就像前面的问题一样,我如何导出才能在我的route.jsUpdated代码中使用。您可以添加mongodb连接并提供HTML文件。不要忘记通过多部分数据发送post文件。路由器。post('/upload',upload.single('image'),异步(req,res,next)=>{const image={data:new Buffer.from(req.file.Buffer,'base64'),contentType:req.file.mimetype}const savedImage=wait ImageModel.create(image);res.send(savedImage);});你能解释一下这句话吗。我还编辑了我的中间件。你能看看它是否也不错吗?