节点JS)未定义的图片上传问题

var http = require('http'); var express = require('express'); var request = require('request'); var mysql = require('mysql'); var bodyParser = require('body-parser'); var fs = require('fs'); var multer = require('multer'); var app = express(); app.use(bodyParser.json()); app.use(express.bodyParser()); app.use(app.router); app.use(multer( {dest:'./uploads/', onFileUploadStart : function(file){ console.log('File recieved:'); console.log(file); }, onFileUploadData:function (file,data){ console.log('Data recieved'); }, onParseEnd: function(req,next){ next(); } })); app.use(express.static(__dirname+"/public")); app.post('/upload',function(request,response){ console.log(request.file); console.log(request.body); }); 

这是我上面处理上传图片的核心代码。

  app.post('/upload',function(request,response){ console.log(request.file); console.log(request.body); }); 

但是我得到的是'undefined {}'

我怎么了? 我正在寻找许多问题,其中大多数人说我必须使用MULTER …但结果是一样的没有任何变化。

我的package.json如下:

{“name”:“photozzle”,“version”:“1.0.0”,“dependencies”:{“body-parser”:“1.14.1”,“clear”:“ ”,“express”:“3.5。 1“,”fs“:” “,”multer“:”^ 0.1.6“,”mysql“:” “,”path“:” “,”q“:” “,”request“:” “} “engines”:{“node”:“0.10.x”,“npm”:“> 1.4.0”}}

你认为? 有什么我失踪?

我正在使用post来testing它。 在这里输入图像描述

最后,我解答了这个感谢“拉扎列夫·亚历山大”下面的图片可以certificate。 我希望我的问题对像我这样的新手开发者会有所帮助。 格拉西亚斯! 在这里输入图像描述

正如这里所描述的那样:

注意:Multer不会处理任何不是多部分(multipart / form-data)的表单。

所以,如果你想使用multer你不应该发送图像作为二进制stream。 您应该使用多部分表单请求。 下面是你如何使用Postman工具实现它:

在这里输入图像描述

另外,我build议你使用最新版本的multer 。 通过在terminal中运行此命令来更新它:

 npm install multer@latest 

之后,删除bodyParser中间件的用法,并使用multer本身。 你的代码应该是这样的:

 var http = require('http'); var express = require('express'); var request = require('request'); var mysql = require('mysql'); var bodyParser = require('body-parser'); var fs = require('fs'); var multer = require('multer') var upload = multer({dest:'./uploads/'}); var app = express(); app.use(bodyParser.json()); app.use(app.router); app.use(express.static(__dirname+"/public")); app.post('/upload', upload.single('img'), function (req, res, next) { console.log(req.file); });