首页 > 解决方案 > 在 http-request 节点中发送文件的 Node-Red 不起作用

问题描述

我正在尝试使用 http-request 节点发送文件,但它不工作。

请找到以下节点红色流的图像。 在此处输入图像描述

请求正文节点中,我添加了以下代码。

const inputFile = msg.payload;

const dataJson = 
{
    'name': 'testName',
    'description':'testdescription',
    'inputfile': inputFile
};
msg.payload = dataJson;
msg.url = 'myAPIurl';

msg.headers = {
    'authorization': 'Bearer TOKEN Here',
    'cookie': 'Cookie here',
    'content-type': 'multipart/form-data;'
};

return msg;

这给出了错误的请求错误。

Read File节点中,我尝试选择这两个选项A single UTF8-Stringa single Buffer Object但仍然出现相同的错误


但我尝试使用请求模块调用函数节点内的 API。它给出了正确的回应。

const request = global.get("request");
const fs = global.get("fs");

const url = 'API';

const tkn = 'TOken Here';
const cookie = 'cookie here';

const fl = fs.createReadStream('/tmp/node-red/app/data/filename.txt');
var options = {
    method: 'POST',
    url: url,
    headers: {
        'Authorization': tkn,
        'Cookie': cookie,
    },
    formData: {
        "name": "test121",
        "description": "",
        inputfile: fl
    }
};

request(options, function (err, resp, body) {

    console.log(body);

});

return msg;

http-request如果我使用节点,我不确定我在哪里犯了错误。

标签: node.jsnode-red

解决方案


从 http-request 节点的侧边栏文档:

上传文件

要执行文件上传,msg.headers["content-type"]应设置为multipart/form-datamsg.payload传递给节点必须是具有以下结构的对象:

{
    "KEY": {
        "value": FILE_CONTENTS,
        "options": {
            "filename": "FILENAME"
        }
    }
}

KEY、FILE_CONTENTS 和 FILENAME 的值应设置为适当的值。

按照这个文档,你msg.payload错了,它应该看起来像:

msg.payload: {
  "name": "testName",
  "description": "description",
  "inputfile": {
    "value": inputfile,
    "options": {
      "filename": "filename.txt"
    }
  }
}

推荐阅读