如何用nodejs通过post发送multipart/form-data类型的http请求

 我来答
育知同创教育
2017-06-25 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
var https = require('https');
var fs = require('fs');
var util = require('util');
var path = require('path');

var BOUNDARYPREFIX = 'nbglme';

var mkpic = function (pic, fn) {
  var mimes = {
    '.png': 'image/png',
    '.gif': 'image/gif',
    '.jpg': 'image/jpeg',
    '.jpeg': 'image/jpeg'
  };
  var ext = path.extname(pic);
  var mime = mimes[ext];
  if (!mime) return;

  fs.readFile('/home/bnlt/'+pic, function (err, data) {
    content = util.format('Content-Disposition: form-data; name="pic"; filename="%s"\r\n', pic);
    content += util.format('Content-Type: %s\r\n\r\n', mime);
    content += data;
    fn(content);
  });
}

var mkfield = function (field, value) {
  return util.format('Content-Disposition: form-data; name="%s"\r\n\r\n%s', field, value);
}

exports.post = function (param, onsuccess, onfailer) {
  if (param.pic) {
    mkpic(param.pic, function (pic) {
      var data = [pic];
      delete param.pic;
      for (var i in param) {
        data.push(mkfield(i, param[i]));
      }

      var max = 9007199254740992;
      var dec = Math.random() * max;
      var hex = dec.toString(36);
      var boundary = BOUNDARYPREFIX + hex;

      var body = util.format('Content-Type: multipart/form-data; boundary=%s\r\n\r\n', boundary)
                 + util.format('--%s\r\n', boundary)
                 + data.join(util.format('\r\n--%s\r\n', boundary))
                 + util.format('\r\n--%s', boundary);

      console.log(body);
    });
  }
}
最后面 console.log(body) 中 body 里的数据就是要发送的数据
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式