mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
add multipart/form-data support to http request node
This commit is contained in:
parent
a6ef755139
commit
a9bf3d0226
@ -129,7 +129,18 @@
|
|||||||
<p>If <code>msg.payload</code> is an Object, the node will automatically set the content type
|
<p>If <code>msg.payload</code> is an Object, the node will automatically set the content type
|
||||||
of the request to <code>application/json</code> and encode the body as such.</p>
|
of the request to <code>application/json</code> and encode the body as such.</p>
|
||||||
<p>To encode the request as form data, <code>msg.headers["content-type"]</code> should be set to <code>application/x-www-form-urlencoded</code>.</p>
|
<p>To encode the request as form data, <code>msg.headers["content-type"]</code> should be set to <code>application/x-www-form-urlencoded</code>.</p>
|
||||||
|
<p>For form-based file uploads, some services require that <code>msg.headers["content-type"]</code> be set to <code>multipart/form-data</code>.
|
||||||
|
To construct <code>msg.payload</code> for this type of request, use the following structure and substitue the <code>KEY</code>, <code>DATA</code>, and <code>FILENAME</code>
|
||||||
|
values for your own.
|
||||||
|
<pre><code>req.formData = {
|
||||||
|
KEY: {
|
||||||
|
value: DATA,
|
||||||
|
options: {
|
||||||
|
filename: ‘FILENAME’
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</code></pre>
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
@ -78,6 +78,7 @@ module.exports = function(RED) {
|
|||||||
}
|
}
|
||||||
var opts = {};
|
var opts = {};
|
||||||
opts.url = url;
|
opts.url = url;
|
||||||
|
opts.formData = {};
|
||||||
opts.timeout = node.reqTimeout;
|
opts.timeout = node.reqTimeout;
|
||||||
opts.method = method;
|
opts.method = method;
|
||||||
opts.headers = {};
|
opts.headers = {};
|
||||||
@ -144,28 +145,33 @@ module.exports = function(RED) {
|
|||||||
var payload = null;
|
var payload = null;
|
||||||
|
|
||||||
if (method !== 'GET' && method !== 'HEAD' && typeof msg.payload !== "undefined") {
|
if (method !== 'GET' && method !== 'HEAD' && typeof msg.payload !== "undefined") {
|
||||||
if (typeof msg.payload === "string" || Buffer.isBuffer(msg.payload)) {
|
if (opts.headers['content-type'] == 'multipart/form-data' && typeof payload === "object") {
|
||||||
payload = msg.payload;
|
opts.formData = msg.payload;
|
||||||
} else if (typeof msg.payload == "number") {
|
|
||||||
payload = msg.payload+"";
|
|
||||||
} else {
|
} else {
|
||||||
if (opts.headers['content-type'] == 'application/x-www-form-urlencoded') {
|
if (typeof msg.payload === "string" || Buffer.isBuffer(msg.payload)) {
|
||||||
payload = querystring.stringify(msg.payload);
|
payload = msg.payload;
|
||||||
|
} else if (typeof msg.payload == "number") {
|
||||||
|
payload = msg.payload+"";
|
||||||
} else {
|
} else {
|
||||||
payload = JSON.stringify(msg.payload);
|
if (opts.headers['content-type'] == 'application/x-www-form-urlencoded') {
|
||||||
if (opts.headers['content-type'] == null) {
|
payload = querystring.stringify(msg.payload);
|
||||||
opts.headers[ctSet] = "application/json";
|
} else {
|
||||||
|
payload = JSON.stringify(msg.payload);
|
||||||
|
if (opts.headers['content-type'] == null) {
|
||||||
|
opts.headers[ctSet] = "application/json";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
if (opts.headers['content-length'] == null) {
|
||||||
if (opts.headers['content-length'] == null) {
|
if (Buffer.isBuffer(payload)) {
|
||||||
if (Buffer.isBuffer(payload)) {
|
opts.headers[clSet] = payload.length;
|
||||||
opts.headers[clSet] = payload.length;
|
} else {
|
||||||
} else {
|
opts.headers[clSet] = Buffer.byteLength(payload);
|
||||||
opts.headers[clSet] = Buffer.byteLength(payload);
|
}
|
||||||
}
|
}
|
||||||
}
|
opts.body = payload;
|
||||||
opts.body = payload;
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
// revert to user supplied Capitalisation if needed.
|
// revert to user supplied Capitalisation if needed.
|
||||||
if (opts.headers.hasOwnProperty('content-type') && (ctSet !== 'content-type')) {
|
if (opts.headers.hasOwnProperty('content-type') && (ctSet !== 'content-type')) {
|
||||||
|
Loading…
Reference in New Issue
Block a user