Загрузка файлов Multer и Express / Node



Req.файлы производят null и теперь req.тело тоже пустое. Я просмотрел все ответы здесь и не могу найти много. К сожалению, документация по малтеру отсутствовала, так что, надеюсь, кто-то прошел через то, что я сейчас делаю, и знает, что происходит.



Мой маршрутизатор.файл js выглядит следующим образом:



var express = require('express');
var request = require('request');
var mid = require('../middleware');
var busboy = require('connect-busboy');
var fs = require('fs');
var multer = require('multer');
var upload = multer({dest: '../public/images/blog'});
var User = require('../data/models/user');
var router = express.Router();
...
...
...
...
/* POST saveblog router. */
router.post('/saveBlog', upload.any(),function(req, res, next) {
console.log(req.body, 'Body');
console.log(req.files, 'files');
var title = req.body.titleInput;
var body = req.body.bodyInput;
request.post('http://' +req.headers.host + '/api/blog', {json: {body: body, title: title, userId: req.session.userId}},
function(err, httpResponse, body) {
if (err) {
console.error('error posting blog');
}
console.log('Blog Post successfully uploaded');
});
return res.redirect('/blog');
});

module.exports = router;


Так что я не совсем уверен, что с этим не так, у меня изначально было это как загрузка.один ("образ"), но это тоже не сработало, так что кто знает.



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



form(action='saveBlog', enctype='multipart/form-data', method='post')
h1 New Blog Post
fieldset(data-role='')
label(for='title') Title
input(id='titleInput', name='titleInput', type='text', value='', placeholder='Your Title', require='true').form-control
label(for='image') Your Title Image
input(id='image',name='image', type='file', accept='image/*')
br
label(for='body') Your Article (Box is resizable)
textarea(id='mytextarea', name='bodyInput').form-control
input(type='submit', value='Post your Article').btn.btn-primary
667   2  

2 ответов:

Я работал над этим сегодня. Одна вещь, которую я заметил, заключается в том, что вы используете upload.single(), данные, которые вы ищете, будут в req.file, а не в req.files.

Я не уверен, что это ваша проблема.

К вашему сведению, этот уменьшенный пример работает для меня:

Сервер.js

var express = require('express');
var app = express();

app.use(require('./routes'));

app.listen(8080);

Маршруты.js

var express = require('express');
var multer = require('multer');
var upload = multer({ dest: '/tmp/' });
var router = express.Router();

/* POST saveblog router. */
router.post('/saveBlog', upload.any(), function(req, res, next) {
  console.log(req.body, 'Body');
  console.log(req.files, 'files');
  res.end();
});

module.exports = router;

Я отправил сообщение от почтальона и получил такой вывод:

{ test: '1' } 'Body'
[ { fieldname: 'asdas',
    originalname: 'vcenter.png',
    encoding: '7bit',
    mimetype: 'image/png',
    destination: '/tmp/',
    filename: '92f425268efaa45cad31f67ec8f14c2d',
    path: '/tmp/92f425268efaa45cad31f67ec8f14c2d',
    size: 54834 } ] 'files'

Просто переименуйте req.file в req.files. Это сработало для меня.

Comments

    Ничего не найдено.