Я сталкиваюсь с этой проблемой при загрузке файла с использованием gridFS. Я также проверил сообщение stackoverflow - Ошибка: соединение с базой данных должно быть открыто для хранения файлов Просто следовал инструкциям в соответствии с ним, но также я сталкиваюсь с этой ошибкой Вот сторона express вещей:
const mongoURI="mongodb+srv://saidarshan:R@mb02501@cluster0-wjhf4.mongodb.net/project?retryWrites=true&w=majority
const promise=mongoose.connect(mongoURI, {
useNewUrlParser: true ,
useCreateIndex: true,
useFindAndModify: false,
useUnifiedTopology: true
})
.then(() => {
console.log('Connected to DB');
})
.catch((err) => {
console.log('ERROR', err.message);
});
const conn = mongoose.connection;
let gfs;
conn.once('open',() => {
gfs = Grid(conn, mongoose.mongo);
gfs.collection('uploads');
});
//create storage object
const storage = new GridFsStorage({
db: promise,
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: 'uploads'
};
resolve(fileInfo);
});
});
}
});
const upload = multer({ storage });
//upload profile pic
app.post("/upload",upload.single("myImage"),(req,res)=>{
res.json({file:req.file});
})
А вот html сторона вещей:
<form action="/upload" method="POST" enctype="multipart/form-data">
<div class="input-group mb-3 fielupload" style="display: none;width: 320px;"r>
<div class="input-group-prepend">
<input type="submit" class="input-group-text" value="Upload">
</div>
<div class="custom-file">
<input type="file" class="custom-file-input" name="myImage">
<label class="custom-file-label" for="inputGroupFile01">Choose file</label>
</div>
</div>
</form>