如何将文件上传到服务器(Node.js)

时间:2018-04-17 10:07:20

标签: node.js express file-upload ejs

不要将照片上传到服务器,如何解决这个问题? 在页面index.ejs上,应根据添加的条目生成照片库。该条目包含一张照片。该条目已添加,但照片未加载。 project (GitHub) 应用程序/ routes.js:

var upload = multer({
        storage: storage,
        limits: {fileSize: 7},
        fileFilter: function (req, file, cd) {
            checkFileType(file, cd);
        }
    }).single('filePhoto');
    function checkFiletType(file, cd) {
        const fileTypes = /jpeg|jpg/;
        const extname = fileTypes.test(path.extname(file.originalname).toLowerCase());
        const mimetype = fileTypes.test(file.mimetype);

        if (extname && mimetype) {
            return cd(null, true);
        } else {
            cd('Error: only JPEG or JPG!')
        }
        
        var Photo = require('../app/models/photo');

    module.exports = function (app, passport) {
      app.get('/', function (req, res,next) {
            Photo.find({}, function (error, photos) {
                var photoList = '';
                     res.render('index.ejs', {photoList: photos});
            });
        });
     }
     app.post('/addPhoto', function (req, res, next) {
            next();
             }, function (req, res) {
            var newPhoto = new Photo(req.body);
            newPhoto.save().then(function (response) {
                console.log('here', response);
                res.status(200).json({code: 200, message: 'OK'});
            }).catch(function (error) {
                console.error('new photo error', error);
            });
        },function (req, res) {
            Photo.find({}, function (error, photos) {
                res.send('index.ejs', {
                    photoList: photos
                });
            });
        });
     };

1 个答案:

答案 0 :(得分:0)

您需要将upload var作为中间件传递到上传路径。

以下是我之前完成此操作的摘录:

// Route:

const storage = multer.memoryStorage()
const upload = multer({ storage: storage })

router.post('/upload', upload.single('photo'), ImageController.upload);


// Image Controller:

upload(req, res){

  console.log("file", req.file)

}

当我发布我的图片时,我确保将其称为photo以匹配我在我的multer中间件中使用的关键字:

所以我像这样创建表单数据:

const formData = new FormData()
formData.append('photo', {
  uri: data.uri,
  type: 'image/jpeg',
});

axios.post(`${SERVER}/images/upload`, 
    formData: formData,
    { headers: {
        'Content-Type': 'multipart/form-data'
      } 
    })
    .then(response => console.log("response", response))
    .catch(err => console.log('err', err))
相关问题