Как сохранить файл локально и сохранить путь в базе данных, используя multer on angular - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть форма, которая запрашивает информацию о файле PDF в Angular.Я хочу загрузить этот файл в папку PDFS , а не в базу данных.Итак, здесь я хочу сделать три вещи:

  1. Как переименовать имя файла, используя заголовок пользователя с расширением pdf
  2. Как сохранить этот файл в папке PDFs
  3. Как сделатьсохранить путь к этому файлу, который мы сохранили в базе данных.

tech: Angular, express, MongoDB, multer

Вы можете предоставить мне ссылку, еслилюбой пример уже доступен со всеми этими условиями.

1 Ответ

0 голосов
/ 09 апреля 2019

Это экспресс-узел и конец монго для сохранения файла в папке локально на вашем экспресс-сервере.Путь будет

    const multer = require('multer');
    const path = require('path');
    const fs = require('fs');
    const DIR = path.join(__dirname, '../PDFS/');
    const storage = multer.diskStorage({
        destination: (req, file, cb) => {
            cb(null, DIR);
        },
        filename: (req, file, cb) => {
          // implement getLoggedInUser() method which basically returns the current logged in user
             cb(null, file.fieldname + '-' + Date.now()+ getLoggedInUser())
        },
    });
    //upload end point
    app.post('/upload', upload.array('uploads[]', 12), (req, res) => {
        console.log(req.files);


        if (req.files.length <= 0) {
            res.status(404).send({ message: 'no file recieved' });
        } else {
         fs.readdirSync(DIR).forEach((file)=>{

         let path=path.join(DIR,file);
         let fileSchema= new FileSchema(path);
         fileSchema.save((err,result)=>{
           if (err) {
             throw new Error({ message: 'user is not saved', status: 500 });
           }
          res.status(200).send({ message: 'file successfully saved' });
         });
       });
     }
    });

Из вашего углового приложения вы можете создать сервис и внедрить его в компонент формы

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { HttpClient, HttpHeaders } from '@angular/common/http'
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class UploadService {
  static API_URL: string = '<url for your upload end point>';
  constructor(private http: HttpClient) { }

  fileUpload(files: any): Observable<Object> {
    const formData: any = new FormData();
    const fileArray: Array<File> = files;
    for (let i = 0; i < fileArray.length; i++) {
      formData.append('uploads[]', fileArray[i], fileArray[i]['name']);
    }
    return this.http.post(UploadService.API_URL + 'upload', formData)
      .pipe(
        map(x => {
          return x;
        })
      );
  }
}
...