2014-11-18 4 views
2

я использую multer, чтобы получить файл от этой формыNode.js - expressjs - multer req.files выходы пустые

<form action="/api/pimage" method="POST" enctype="multipart/form-data"> 
    <fieldset> 
     <input type="file" name="profileimage"> 
     <input type="submit"> 
    </fieldset> 
</form> 

используя этот сценарий стороне сервера

app.post('/api/pimage', function(req, res, next) { 
    console.log(req.body, req.files); 
}); 

Проблема заключается в том, что REQ .body распечатывает {profileimage: 'image.png'} и req.files распечатывает {} , где вы видите проблему? спасибо

P.S. Я использую app.use(bodyParser.urlencoded({ extended: false })); получить req.body и app.use(multer({ dest: './uploads/'})); для req.files

+0

ли uploads' существует каталог 'и это записывающий? –

+0

Каталог автоматически создается multer при запуске – iJumbo

+0

Если вы видите 'req.body.profileimage', ваш запрос не отправляется как' multipart/form-data' каким-либо образом. Это то, что вы увидите, когда 'Content-Type' является' application/x-www-form-urlencoded'. Можете ли вы поместить 'console.dir (req.headers ['content-type'])' в обработчик 'app.post()'? – mscdex

ответ

1

Я обнаружил, что использование multer рядом bodyParser может вызвать req.file быть неопределенным. Обязательно проверьте это, если у вас возникли проблемы.

0

я кладу (Есть много я представить себе и, конечно, лучше) решение, чтобы помочь многим людям, как я, потому что я искал в течение 1 всего дня ;-(


var express = require('express'); 
var fileUpload = require('express-fileupload'); 
var fs = require("fs"); 
var app = express(); 

console.log('étape 0'); 

app.use(express.static('mesStatic')); 
app.use(fileUpload()); 

console.log('étape 1'); 

app.get('/indexFileUpload.htm', function (req, res) { 
    res.sendFile(__dirname + "/" + "indexFileUpload.htm"); 
}) 

console.log('étape 2'); 

app.post('/file_upload', function (req, res) { 

    console.log('étape 3'); 
    console.log('req.files:' , req.files); 

    if (!req.files) { 
     res.send('No files to upload.'); 
     return; 
    } 

    console.log('req.files.file.data:' , req.files.file.data); 
    var bufDataFile = new Buffer(req.files.file.data, "utf-8"); 
    console.log('étape 3.1'); 
    console.log('__dirname : ' + __dirname); 

    fs.writeFile(__dirname + '/file_upload/output.txt', bufDataFile, function(err) { 
     if (err) { 
     return console.error(err); 
     } 
     else { 
     console.log("Data written successfully !"); 
     }  
     console.log('étape 4'); 
     res.end('Fin OK !!!'); 
    }) 
}) 
var server = app.listen(8081, function() { 
    var host = server.address().address 
    var port = server.address().port 

    console.log("Example app listening at http://%s:%s", host, port); 
}) 
0

Вы должны указать свой загрузить функцию, определенную для multer, прежде чем просить req.file в function(req, res), вы можете следовать приведенным ниже код

var Storage = multer.diskStorage({ 
     destination: function (req, file, callback) { 
      callback(null, "./images/"); 
     }, 
     filename: function (req, file, callback) { 
      callback(null, file.fieldname + '_' + Date.now() + '.jpg'); 
     } 
    }); 
    var upload = multer({ storage: Storage }).single('imagePath'); 

    router.post('/file_upload', upload, function(req, res, next){ 
     console.log(req.file); 
var Storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 
     callback(null, "./public/images/"); 
    }, 
    filename: function (req, file, callback) { 
     callback(null, file.fieldname + '_' + Date.now() + '.jpg'); 
    } 
}); 
var upload = multer({ storage: Storage }).single('imagePath'); 

router.post('/add-product', upload, function(req, res, next){ 
    var newProduct = new Product(); 
} 
Смежные вопросы