Сохраните файл в mongodb, используя angular и Nodejs - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь загрузить изображение в mongodb, используя angular и nodejs. Код ниже. Я получил работающий бэкэнд, но проблема с вводом html, я получаю 'C: fakepath / file.xyz'. Я искал в Интернете и увидел, что нет способа получить относительный путь к файлу. Может кто-нибудь, пожалуйста, скажите мне, как я могу изменить свой код переднего плана, чтобы получить и отправить путь к файлу, чтобы затем сохранить. Я прочитал, что браузер не позволяет относительный путь к файлу, но как я могу загрузить. Спасибо!

Метод сохранения изображения nodejs:

 async function SaveImage(userParam) {
    const entry = new imageEntries(userParam);
    entry.image.data = fs.readFileSync(userParam.imagePath);
    entry.image.contentType = 'image/png';
    await entry.save();
    }

HTML-код:

<div class="upload-btn-wrapper">
  <button class="btn">Upload a file</button>
  <input type="file" name="myfile" id="myFile" />
</div>

То, что я передаю как путь в бэкэнде:

ImageJournal.imagePath = (<HTMLInputElement>document.getElementById('myFile')).value;

но с кодом выше я получаю следующую ошибку:

ENOENT: no such file or directory, open 'C:\fakepath\chapter9problemsandanswers.doc'

1 Ответ

0 голосов
/ 29 октября 2018

Хорошо, вот оно:

HTML:

<div class="form-group">
      <label for="pdf">PDF</label>
      <input type="file" id="pdf" (change)="onFileChange($event)" #fileInput>
      <button type="button" class="btn btn-sm btn-default" (click)="clearFile()">clear file</button>
</div>

TS:

import { Component, OnInit, ElementRef, ViewChild } from '@angular/core';
@ViewChild('fileInput') fileInput: ElementRef;
public image;

 onFileChange(event) {
    let reader = new FileReader();
    if(event.target.files && event.target.files.length > 0) {
      let file = event.target.files[0];
      reader.readAsDataURL(file);
      let value = <String>reader.result;
      reader.onload = () => {
        this.image = {
          filename: file.name,
          filetype: file.type,
          value: value.split(',')[1]
        };
      };
    }
  }

Затем отправьте изображение с http постом с сервисом. На сервере:

// отправить файл

app.post('/api/sendFile', function (req, res) {
    File.create({
        filename: req.body.filename,
        filetype: req.body.filetype,
        value: req.body.value
    }, function (err, file) {
        if (err)
            res.send(err);
        else {
            const response = {
                name: file.filename
            }
            res.send(response);
        }
    });
});

Это написано с помощью mongoDb и mongoose, и у меня есть модель с именем File. Это все, что нужно для его сохранения.

...