Я застрял на этом некоторое время.У меня есть приложение со средним стеком, использующее Angular 6. Я пытаюсь загрузить файл сохранения в свой бэкэнд.Я нашел ЭТУ статью.Но либо я получаю сообщение об ошибке, что-то вроде
<code><!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8">
<title>Error</title> </head> <body> <pre>Error: ENOENT: no such file or
directory, open ''<br> at
Error (native)
, возвращенное с сервера, или файл req.file пуст, и мое сохранение не происходит.Я пытаюсь собрать воедино лучший способ сделать это.
Спасибо
вот моя конечная точка
app.post('/api/posts', upload.single('file'), (req, res, next) => {
const post = new Post({
title: req.body.title,
content: req.body.content,
image:req.file
});
post
.save()
.then(createdPost => {
res.status(201).json({
status: true,
id: createdPost._id,
});
})
.catch(error => {
res.status(500).json({ status: false, message: 'Didnt save ', error });
});
});
А вот как настроить мультитер, поток файлов сетки и хранилище
let gfs;
conn.once('open', () => {
gfs = Grid(conn.db, mongoose.mongo);
gfs.collection('uploads');
});
const storage = new GridFsStorage({
url: connection,
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 });