хранение картинок с почтальоном, а не с веб-интерфейсом - PullRequest
0 голосов
/ 24 октября 2018

Я начал создавать проект со средним стеком, моя цель - хранить изображения и некоторые данные в базе данных, это мой внутренний код:

Контроллер:

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 его покажи мне неопределенным .. в чем проблема?спасибо

...