Nodejs Multer diskStorage не работает - почему целевая временная папка не предназначена для загрузки и не загружается - PullRequest
0 голосов
/ 06 сентября 2018

Я использую Multer для загрузки изображения профиля и, к сожалению, не работает правильно. Это мой код:

var express =   require("express");
var multer  =   require('multer');
var app         =   express();
var storage =   multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './public/uploads');
  },
  filename: function (req, file, callback) {
    callback(null, file.fieldname + '-' + Date.now());
  }
});
var upload = multer({ storage : storage}).single('avatar');

exports.uploadAvatar = function(req, res) {
    console.log(req.files);
    upload(req,res,function(err) {
        if(err) {
            return res.end("Error uploading file.");
        }
        res.end("File is uploaded");
    });
};

и маршрут:

app.post('/api/uploadAvatar', requiredAuthentication, routes.api.instructor.uploadAvatar);

Это моя форма:

<form method="post" id="editProfile" enctype="multipart/form-data" action="/api/uploadAvatar">
    <div class="form-group">
        <label>Profile image <span>*</span></label>
        <input type="file" name="avatar" class="form-control" id="avatar" required />
    </div>
    <div class="form-actions">
        <button type="submit" class="button" id="btnSubmit">Upload</button>
    </div>
</form>

Вот что записывает console.log(req.files);: enter image description here

Как вы можете видеть, место назначения предназначено для папки 'Temp', и имя файла не генерируется. Может кто-нибудь, пожалуйста, узнать, что здесь происходит не так?

Обратите внимание, что я использую инфраструктуру keystoneJS, но, полагаю, она не окажет никакого влияния на это.

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

В моем API для всех узлов я использовал multer таким образом, и все время он прекрасно работает для меня.

var storage = multer.diskStorage({
  destination: function(req, file, callback) {
    callback(null, './uploads')
  },
  filename: function(req, file, callback) {
    console.log(file)
    callback(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname))
  }
})

Для более подробной информации смотрите Ссылка .

Надеюсь, это также поможет вам.

0 голосов
/ 07 сентября 2018

Попробуйте это,

var express =   require("express");
var multer  =   require('multer');
var app         =   express();
var storage =   multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './public/uploads');
  },
  filename: function (req, file, callback) {
    callback(null, file.fieldname + '-' + Date.now());
  }
});
var upload = multer({ storage : storage}).single('avatar');

module.exports. = { uploadAvatar: upload };

Это может сработать.

...