收藏
回答

后端使用nodejs,API接口:security.imgSecCheck如何才能正确调用?

测试了几十遍,一直传不上数据,一直返回{ errcode: 41005, errmsg: 'media data missing hint: [NM04491543]' },在此跪求大佬解决。

我的代码如下,写的不好望大佬指教,最好解释一下。

const fs = require('fs');

const request = require('request');

request({

            url: `https://api.weixin.qq.com/wxa/img_sec_check?access_token=${access_token}`,
            method: 'POST',
            json: true,
            form: {
                media: fs.readFileSync(file.path), // 其中file.path是图片路径,fs.readFileSync(file.path)返回的是一个Buffer
            },
        },
            (err, response, body) => {
                console.log(body);
            })


最后一次编辑于  11-30
回答关注问题邀请回答
收藏

3 个回答

  • 10号
    10号
    12-03

    请问解决没有

    12-03
    赞同
    回复
  • 老张
    老张
    12-01

    改用云调用吧。

    12-01
    赞同
    回复
  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    12-01

    网上找的,试试看

    var request = require('request');

    var FormData = require('form-data');


    var form = new FormData();

    form.append("media", fs.readFileSync(file.path));


    form.getLength(function(err, length){

      if (err) {

       return requestCallback(err);

      }

      var r = request.post("https://api.weixin.qq.com/wxa/img_sec_check?access_token=${access_token}", requestCallback);

      r._form = form;     

      r.setHeader('content-length', length);

    });


    function requestCallback(err, res, body) {

      console.log(body);

    }


    12-01
    赞同
    回复 7
    • 中二の小熊猫
      中二の小熊猫
      12-01
      首先感谢大佬回答,不过我刚试了一下,好像还是不行,而且我在网上找听说好像要用什么流之类的,结尾要追加‘\r\n’之类的,小弟是在是心累了
      12-01
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      12-01回复中二の小熊猫
      fs.createReadStream(file.path)??
      12-01
      回复
    • 中二の小熊猫
      中二の小熊猫
      12-01回复o0o有脾气的酸奶
      还是不行,,,
      12-01
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      12-01回复中二の小熊猫
      要不你nodejs端自己npm安装wx-server-sdk吧,试试
      const cloud = require('wx-server-sdk')
      然后调用
      cloud.openapi.security.imgSecCheck({
        media: {
          contentType: 'image/png',
          value: Buffer
        }
      })
      12-01
      回复
    • o0o有脾气的酸奶
      o0o有脾气的酸奶
      12-01回复中二の小熊猫
      var formData = function (param) {
        var max = 9007199254740992;
        var dec = Math.random() * max;
        var hex = dec.toString(36);
        var boundary = '---------------------------' + BOUNDARYPREFIX + hex;
        var data = '--' + boundary + "\r\n";
        // form data
        var formdata = "content-disposition: form-data; name=\"access_token\"\r\n";
        formdata += "content-type: text/plain\r\n\r\n";
        formdata += param.access_token + "\r\n";
        formdata += '--' + boundary + "\r\n";
        var mimes = {
          '.png': 'image/png',
          '.gif': 'image/gif',
          '.jpg': 'image/jpeg',
          '.jpeg': 'image/jpeg'
        };
        var ext = path.extname(param.media);
        var mime = mimes[ext];
        // file data
        var filedata = '';
        filedata += "content-disposition: form-data; name=\"media\"; filename=\"" + param.media.split('/').pop() + "\"\r\n";
        filedata += "content-type: " + mime + "\r\n\r\n";
        filedata += fs.readFileSync(param.media) + "\r\n";
        filedata += '--' + boundary + "\r\n";
        data += formdata + filedata + "--\r\n\r\n";
        return { data, boundary };
      }
      return new Promise((rs, rj) => {
        var pdata = formData({ media: file.path, access_token: access_token })
        var body = '';
        const req = https.request({
          hostname: 'api.weixin.qq.com',
          port: 443,
          method: 'POST',
          path: '/wxa/img_sec_check?access_token=' + access_token,
          headers: {
            "content-type": "multipart/form-data; boundary=" + pdata.boundary,
            'Content-Length': Buffer.byteLength(pdata.data)
          }
        }, (res) => {
          res.on('data', function (d) {
            body += d;
          })
          res.on('end', function () {
            rs(JSON.parse(body))
          })
        });
        req.on('error', (e) => {
          rj(e);
        });
        req.write(pdata.data);
        req.end();
      })
      12-01
      回复
    查看更多(2)
问题标签