From f8eac3469fb5b7078016df76c52a4494836183f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Davim?= Date: Tue, 13 Feb 2024 19:07:11 -0300 Subject: [PATCH] feat(#1579): Add file uploading support for CLI (#1572) * feat(cli): add support for file upload * fix: remove wrong console log --- packages/bruno-cli/src/runner/prepare-request.js | 10 ++++++++-- packages/bruno-cli/src/runner/run-single-request.js | 7 +++++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/bruno-cli/src/runner/prepare-request.js b/packages/bruno-cli/src/runner/prepare-request.js index 2a001e1b9..65405eced 100644 --- a/packages/bruno-cli/src/runner/prepare-request.js +++ b/packages/bruno-cli/src/runner/prepare-request.js @@ -1,4 +1,5 @@ const { get, each, filter } = require('lodash'); +const fs = require('fs'); const decomment = require('decomment'); const prepareRequest = (request, collectionRoot) => { @@ -106,10 +107,15 @@ const prepareRequest = (request, collectionRoot) => { if (request.body.mode === 'multipartForm') { const params = {}; const enabledParams = filter(request.body.multipartForm, (p) => p.enabled); - each(enabledParams, (p) => (params[p.name] = p.value)); + each(enabledParams, (p) => { + if (p.type === 'file') { + params[p.name] = p.value.map((path) => fs.createReadStream(path)); + } else { + params[p.name] = p.value; + } + }); axiosRequest.headers['content-type'] = 'multipart/form-data'; axiosRequest.data = params; - // TODO: Add support for file uploads } if (request.body.mode === 'graphql') { diff --git a/packages/bruno-cli/src/runner/run-single-request.js b/packages/bruno-cli/src/runner/run-single-request.js index 4a2bcdbe3..e30a667c2 100644 --- a/packages/bruno-cli/src/runner/run-single-request.js +++ b/packages/bruno-cli/src/runner/run-single-request.js @@ -40,10 +40,13 @@ const runSingleRequest = async function ( // make axios work in node using form data // reference: https://github.com/axios/axios/issues/1006#issuecomment-320165427 if (request.headers && request.headers['content-type'] === 'multipart/form-data') { - // TODO: Add support for file uploads const form = new FormData(); forOwn(request.data, (value, key) => { - form.append(key, value); + if (value instanceof Array) { + each(value, (v) => form.append(key, v)); + } else { + form.append(key, value); + } }); extend(request.headers, form.getHeaders()); request.data = form;