使用connect-multiparty和express.js的正确方法?

时间:2015-10-02 19:13:52

标签: node.js express multer body-parser busboy

我正在尝试将文件上传到我的服务器,并使用connect-multiparty中间件从帖子请求中提取它们。但是,当我在服务器上收到请求时,req.filesreq.body对象为空(不为空,但node-inspector显示它们为Object s,其中没有任何内容

以下是我与之合作的代码:

server.js:

var express = require( "express" );
var app = express();
var server = require( "http" ).Server( app );
var fs = require( "fs" );
var multipart = require('connect-multiparty');

app.use( express.static( "public" ) );
app.use( multipart() );

app.post( "/httpUpload", function( req, res ) {
    console.log( "Received post request" );
}

的index.html:

<form action="/httpUpload" method="post" enctype="multipart/form-data">
  <input type="file" id="uploadFileInput">
  <div class="row">
    <div class="col-md-6">
      <input type="submit">
    </div>
  </div>
</form>

尝试使用multerconnect-busboybody-parser时,我得到了类似的结果。我会喜欢这个解决方案对我有用,但它并没有:http://howtonode.org/really-simple-file-uploads

所以...在我失败的所有尝试中唯一的共同主题是我。 ; o)任何想法我做错了什么?

2 个答案:

答案 0 :(得分:1)

嗯......这不是我的问题的答案,但当我更改我的代码以删除表单并通过jQuery的ajax方法发送帖子请求时,req.files对象已经我的数据。 (耸肩)这是我的js中的代码使它工作:

$.ajax( {
    url: "/httpUpload",
    type: "POST",
    processData: false, // important
    contentType: false, // important
    dataType : "json",
    data: formData
} );

这是让我走上正确道路的帖子: File Upload without Form

答案 1 :(得分:1)

这是我提取上传文件的方法:

var express = require('express');
var multiparty = require('connect-multiparty'),
    multipartyMiddleware = multiparty({ uploadDir: './imagesPath' });

var router = express.Router();

router.post('/', multipartyMiddleware, function(req, res) {
  console.log(req.body, req.files);
  var file = req.files.file;
  console.log(file.name);
  console.log(file.type);
  res.status(200).send('OK');
});

module.exports = router;

这会将您上传的文件保存到imagesPath文件夹