From 20f737b30cab972c97a5af80f140eaf2b7be25a2 Mon Sep 17 00:00:00 2001 From: Thomas Roger Date: Tue, 7 Jan 2025 16:12:49 +0100 Subject: [PATCH] NXJS-218: fix multipart/form-data handling --- lib/operation.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/operation.js b/lib/operation.js index c1626cc..9322b35 100644 --- a/lib/operation.js +++ b/lib/operation.js @@ -108,19 +108,23 @@ class Operation extends Base { */ execute(opts = {}) { const options = this._computeOptions(opts); - options.headers = options.headers || {}; - options.headers['Content-Type'] = this._computeContentTypeHeader(this._automationParams.input); + const body = this._computeRequestBody(); + const headers = this._computeRequestHeaders(body); + const url = this._computeRequestURL(); let finalOptions = { + body, + headers, + url, method: 'POST', - url: this._computeRequestURL(), - body: this._computeRequestBody(), }; finalOptions = extend(true, finalOptions, options); + return this._nuxeo.http(finalOptions); } - _computeContentTypeHeader(input) { - return this._isMultipartInput(input) ? 'multipart/form-data' : 'application/json'; + _computeRequestHeaders(body) { + const contentType = body instanceof FormData ? body.getHeaders()['content-type'] : 'application/json'; + return { 'Content-Type': contentType }; } _computeRequestURL() { @@ -167,7 +171,7 @@ class Operation extends Base { context: this._automationParams.context, }; const form = new FormData(); - form.append('params', JSON.stringify(automationParams)); + form.append('params', JSON.stringify(automationParams), { contentType: 'application/json' }); let inputIndex = 0; for (const blob of input) { @@ -186,7 +190,7 @@ class Operation extends Base { context: this._automationParams.context, }; const form = new FormData(); - form.append('params', JSON.stringify(automationParams)); + form.append('params', JSON.stringify(automationParams), { contentType: 'application/json' }); form.append('input', input.content, input.name); return form; }