загрузка файла Multer не показывает путь к файлу - PullRequest
0 голосов
/ 04 февраля 2020

Я использую node, express и multer для загрузки файлов в приложение angular, имея mongoDB для базы данных. Когда я загружаю файл, хотя он загружается в целевую папку с именем uploads, которую я объявил как stati c в своем индексе. js, его путь к файлу не отображается в базе данных и остается пустым в качестве значения по умолчанию. Ниже приведен снимок моей базы данных, когда форма создана и изображение также загружено, но поле imagePath, где должно быть расположение, остается пустым

{
    "title": "title to check file upload second time",
    "description": "checking file upload check",
    "bodyHtml": "",
    "views": 0,
    "isPublished": true,
    "category": "Drama",
    "author": "",
    "imagePath": "",
    "_id": "5e399bd4de5df134604a662f",
    "blogId": "ZSiEu37z",
    "created": "2020-02-04T16:29:08.000Z",
    "lastModified": "2020-02-04T16:29:08.000Z",
    "__v": 0
}

настройки мультипроцессора на контроллере:

const multer = require('multer')

 const storage = multer.diskStorage({
     destination: function(req, file, cb) {
         cb(null, './uploads/')
     },
     filename: function(req, file, cb) {
         cb(null, Date.now() + file.originalname)
     }
 })

 const upload = multer({storage: storage})
let setRouter = (app) => {
    let baseUrl = appConfig.apiVersion+'/blogs';

app.post(baseUrl+'/create', upload.single('imagePath'), (req, res) => {
    var today = time.now()
    let blogId = shortid.generate()
    let newBlog = new BlogModel({

        blogId: blogId,
        title: req.body.title,
        description: req.body.description,
        imagePath: req.body.imagePath

    }) // end new blog model

    newBlog.save((err, result) => {
        if (err) {
            console.log(err)
            res.send(err)
        } else {
            res.send(result)

        }
    }) // end new blog save
})

модель блога

// importing mongoose module
const mongoose = require('mongoose')
// import schema 
const Schema = mongoose.Schema;

let blogSchema = new Schema(
    {
        blogId: {
            type: String,
            unique: true,
            index: true
        },
        title: {
            type: String,
            default: ''
        },
        description: {
            type: String,
            default: ''
        },
        imagePath: {
            type: String,
            default: ''
        }
    }
)

mongoose.model('Blog', blogSchema);

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

внутри функции контроллера при сохранении объекта json используйте req.file.path вместо req.body.imagePath в качестве значения imagePath

0 голосов
/ 04 февраля 2020

Вы можете установить имя файла, который будет использоваться в каталоге папки загрузки перед загрузкой файла, просто сохраните это имя в пн go

https://expressjs.com/en/resources/middleware/multer.html

...