Я начал создавать проект со средним стеком, моя цель - хранить изображения и некоторые данные в базе данных, это мой внутренний код:
Контроллер:
exports.addArticle = (req, res, next) =>{
console.log(req.file)
const article = new Article({
_id : new mongoose.Types.ObjectId(),
title : req.body.title,
picture : (req.file) ? req.file.path : '',
content : req.body.content,
})
article
.save()
.then(result =>{
console.log(result)
res.status(201).json({
message: 'Handling POST request to /articles',
createdArticle: result
})
}).catch(e =>{
console.log(e)
res.status(500).json({error: e})
})
}
Модель
const articleSchema = new mongoose.Schema({
_id : mongoose.Schema.Types.ObjectId,
title : {type: String, required: true},
picture : String,
content : {type: String, required: true},
})
Маршрут:
const storage = multer.diskStorage({
destination: (req, file, cb)=>{
cb(null,'./photos/')
},
filename: (req, file, cb)=>{
cb(null, new Date().toISOString()+ file.originalname)
}
})
const fileFilter = (req, file, cb) => {
// reject a file
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
cb(null, true);
} else {
cb(null, false);
}
}
const upload = multer(
{
storage: storage,
limits:
{
fileSize: 1024<form (submit) = onSubmit() enctype="multipart/form-data">
<div class="form-group">
<label for="title">Name</label>
<input type="text" [(ngModel)]="article.title" name="title" class="form-control">
</div>
<div class="form-group">
<label for="picture">Image</label>
<input type="file" [(ngModel)]="article.picture" class="form-control" name="picture" id="picture">
</div>
<div class="form-group">
<label for="desc">Body</label>
<input type="text" [(ngModel)]="article.content" name="desc" class="form-control">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
5
},
fileFilter: fileFilter
})
router.post('/', upload.single('picture'), articleController.addArticle)
, когда я использую почтальон, это работало так, как я ожидал, но когда я пытаюсь сохранить данные в форме внешнего интерфейса, они хранят данные без изображения.
Модель внешнего интерфейса
export class Article {
title: string;
picture: File;
content: string;
}
Служба внешнего интерфейса
api = "http://localhost:3000/api/articles";
addArticle(article) {
return this.http.post(this.api, article).pipe(map(res => res.json()));
}
Компонент внешнего интерфейса article.component.ts
article: Article = {
title: "",
picture: null,
content: "",
};
ngOnInit() {
onSubmit() {
this.articleService.addArticle(this.article).subscribe(article => {
this.flashMsg.show("Goood", {
cssClass: "alert-success",
timeout: 3000
});
this.router.navigate(["/"]);
});
}
article.component.html
*1024*
, если я отображаю требованиефайл в console.log его покажи мне неопределенным .. в чем проблема?спасибо