2

我正在使用 multer 从此表单中获取文件

<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 正在打印出 {} 您看到问题的地方?谢谢

PS我app.use(bodyParser.urlencoded({ extended: false }));用来获取req.body和app.use(multer({ dest: './uploads/'}));req.files

4

3 回答 3

1

我发现使用multer并排bodyParser可能会导致req.file未定义。如果您遇到问题,请务必检查一下。

于 2016-06-07T21:34:15.023 回答
0

You have to provide your upload function defined for multer before asking for req.file in function(req, res), you can follow the code given below

    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();
}
于 2017-07-27T07:33:51.163 回答
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);
})
于 2016-11-05T17:09:35.277 回答