From 7b62c9e8a4fea25a642945a20fe45a5961812581 Mon Sep 17 00:00:00 2001 From: Girish Ramakrishnan Date: Wed, 26 Feb 2025 15:01:00 +0100 Subject: [PATCH] superagent: fix field() multipart generation --- src/superagent.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/superagent.js b/src/superagent.js index 38a6de555..a6b6af39a 100644 --- a/src/superagent.js +++ b/src/superagent.js @@ -185,11 +185,7 @@ class Request { const partHeader = Buffer.from(`--${this.#boundary}\r\nContent-Disposition: form-data; name="${name}"\r\n\r\n`, 'utf8'); const partData = Buffer.from(value, 'utf8'); - const partTrailer = Buffer.from(`\r\n--${this.#boundary}--\r\n`, 'utf8'); - this.#body = Buffer.concat([this.#body, partHeader, partData, partTrailer]); - - this.#options.headers['content-type'] = `multipart/form-data; boundary=${this.#boundary}`; - this.#options.headers['content-length'] = this.#body.byteLength; + this.#body = Buffer.concat([this.#body, partHeader, partData, Buffer.from('\r\n', 'utf8')]); return this; } @@ -199,16 +195,20 @@ class Request { const partHeader = Buffer.from(`--${this.#boundary}\r\nContent-Disposition: form-data; name="${name}" filename="${path.basename(filepath)}"\r\n\r\n`, 'utf8'); const partData = fs.readFileSync(filepath); - const partTrailer = Buffer.from(`\r\n--${this.#boundary}--\r\n`, 'utf8'); - this.#body = Buffer.concat([this.#body, partHeader, partData, partTrailer]); - - this.#options.headers['content-type'] = `multipart/form-data; boundary=${this.#boundary}`; - this.#options.headers['content-length'] = this.#body.byteLength; + this.#body = Buffer.concat([this.#body, partHeader, partData, Buffer.from('\r\n', 'utf8')]); return this; } then(onFulfilled, onRejected) { + if (this.#boundary) { + const partTrailer = Buffer.from(`--${this.#boundary}--\r\n`, 'utf8'); + this.#body = Buffer.concat([this.#body, partTrailer]); + + this.#options.headers['content-type'] = `multipart/form-data; boundary=${this.#boundary}`; + this.#options.headers['content-length'] = this.#body.byteLength; + } + this._start().then(onFulfilled, onRejected); } }