From fae31a789718e7320e491a20ca25c7a44d3d9dda Mon Sep 17 00:00:00 2001 From: Panu Kalliokoski Date: Tue, 9 Jan 2018 18:31:49 +0200 Subject: [PATCH] add a :mime-subtype request parameter to override the multipart/... type in multipart requests --- src/clj_http/core.clj | 2 +- src/clj_http/core_old.clj | 2 +- src/clj_http/multipart.clj | 13 +++++++------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/clj_http/core.clj b/src/clj_http/core.clj index 3a68e0f7..1df2d007 100644 --- a/src/clj_http/core.clj +++ b/src/clj_http/core.clj @@ -423,7 +423,7 @@ (.setCredentials authscope creds))))) (if multipart (.setEntity ^HttpEntityEnclosingRequest http-req - (mp/create-multipart-entity multipart)) + (mp/create-multipart-entity multipart req)) (when (and body (instance? HttpEntityEnclosingRequest http-req)) (if (instance? HttpEntity body) (.setEntity ^HttpEntityEnclosingRequest http-req body) diff --git a/src/clj_http/core_old.clj b/src/clj_http/core_old.clj index c982bbbb..d6a7e8c1 100644 --- a/src/clj_http/core_old.clj +++ b/src/clj_http/core_old.clj @@ -285,7 +285,7 @@ (.addHeader http-req header-n (str header-v)))) (if multipart (.setEntity ^HttpEntityEnclosingRequest http-req - (mp/create-multipart-entity multipart)) + (mp/create-multipart-entity multipart req)) (when (and body (instance? HttpEntityEnclosingRequest http-req)) (if (instance? HttpEntity body) (.setEntity ^HttpEntityEnclosingRequest http-req body) diff --git a/src/clj_http/multipart.clj b/src/clj_http/multipart.clj index 7b066cc2..e2691556 100644 --- a/src/clj_http/multipart.clj +++ b/src/clj_http/multipart.clj @@ -2,7 +2,7 @@ "Namespace used for clj-http to create multipart entities and bodies." (:import (java.io File InputStream) (org.apache.http.entity ContentType) - (org.apache.http.entity.mime MultipartEntity) + (org.apache.http.entity.mime MultipartEntityBuilder) (org.apache.http.entity.mime HttpMultipartMode) (org.apache.http.entity.mime.content ContentBody ByteArrayBody @@ -128,12 +128,13 @@ (defn create-multipart-entity "Takes a multipart vector of maps and creates a MultipartEntity with each map added as a part, depending on the type of content." - [multipart] - (let [mp-entity (MultipartEntity. HttpMultipartMode/STRICT - nil - (encoding-to-charset "UTF-8"))] + [multipart {:keys [mime-subtype]}] + (let [mp-entity (doto (MultipartEntityBuilder/create) + (.setStrictMode) + (.setCharset (encoding-to-charset "UTF-8")) + (.setMimeSubtype (or mime-subtype "form-data")))] (doseq [m multipart] (let [name (or (:part-name m) (:name m)) part (make-multipart-body m)] (.addPart mp-entity name part))) - mp-entity)) + (.build mp-entity)))