【问题标题】:how to handle multipart/form-data in node.js如何在 node.js 中处理 multipart/form-data
【发布时间】:2012-10-21 20:57:37
【问题描述】:

我正在使用多部分表单数据从客户端上传图像文件。我想使用 node.js 在服务器端接收并将其作为文件写入。

<html>
    <body>
        <form action="url" method="post" enctype="multipart/form-data">
            <input type="text" name="imageName">
            <input type="file" name="sam">
        </form>
    </body>
</html>

这是我的客户端代码。如何在服务器端处理这个文件。

【问题讨论】:

    标签: forms node.js multipartform-data


    【解决方案1】:

    链接下面是重复的问题。

    Uploading images using Node.js, Express, and Mongoose

    示例如下:

    // Expose modules in ./support for demo purposes
    require.paths.unshift(__dirname + '/../../support');
    
    /**
     * Module dependencies.
     */
    
    var express = require('../../lib/express')
      , form = require('connect-form');
    
    var app = express.createServer(
      // connect-form (http://github.com/visionmedia/connect-form)
      // middleware uses the formidable middleware to parse urlencoded
      // and multipart form data
      form({ keepExtensions: true })
    );
    
    app.get('/', function(req, res){
      res.send('<form method="post" enctype="multipart/form-data">'
        + '<p>Image: <input type="file" name="image" /></p>'
        + '<p><input type="submit" value="Upload" /></p>'
        + '</form>');
    });
    
    app.post('/', function(req, res, next){
    
      // connect-form adds the req.form object
      // we can (optionally) define onComplete, passing
      // the exception (if any) fields parsed, and files parsed
      req.form.complete(function(err, fields, files){
        if (err) {
          next(err);
        } else {
          console.log('\nuploaded %s to %s'
            ,  files.image.filename
            , files.image.path);
          res.redirect('back');
        }
      });
    
      // We can add listeners for several form
      // events such as "progress"
      req.form.on('progress', function(bytesReceived, bytesExpected){
        var percent = (bytesReceived / bytesExpected * 100) | 0;
        process.stdout.write('Uploading: %' + percent + '\r');
      });
    });
    
    app.listen(3000);
    console.log('Express app started on port 3000');
    

    如果您的问题没有解决,请访问 this link 。这是一篇关于文件上传的好文章。

    【讨论】:

      【解决方案2】:

      您可以使用请求模块来发送多部分请求。下面是示例代码:

      var jsonUpload = {  };
      var formData = {
          'file': fs.createReadStream(fileName),
          'jsonUpload': JSON.stringify(jsonUpload)
      };
      var uploadOptions = {
          "url": "https://upload/url",
          "method": "POST",
          "headers": {
              "Authorization": "Bearer " + accessToken
          },
          "formData": formData
      }
      var req = request(uploadOptions, function(err, resp, body) {
          if (err) {
              console.log('Error ', err);
          } else {
              console.log('upload successful', body)
          }
      });
      

      【讨论】:

      • 他想处理数据,而不是发送数据。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多