|
4 | 4 | [clojure.string :as string] |
5 | 5 | [ring.util.codec :as codec] |
6 | 6 | [ring.util.mime-type :as mime]) |
7 | | - (:import [java.io ByteArrayInputStream ByteArrayOutputStream File] |
| 7 | + (:import [java.io ByteArrayInputStream ByteArrayOutputStream File InputStream] |
| 8 | + [java.net URI] |
8 | 9 | [java.nio.charset Charset] |
| 10 | + [java.util Map] |
9 | 11 | [org.apache.hc.core5.http ContentType HttpEntity] |
10 | 12 | [org.apache.hc.client5.http.entity.mime MultipartEntityBuilder])) |
11 | 13 |
|
|
75 | 77 | (defmethod body (class (byte-array 0)) [request bytes] |
76 | 78 | (-> request |
77 | 79 | (content-length (count bytes)) |
78 | | - (assoc :body (java.io.ByteArrayInputStream. bytes)))) |
| 80 | + (assoc :body (ByteArrayInputStream. bytes)))) |
79 | 81 |
|
80 | | -(defmethod body java.util.Map [request params] |
| 82 | +(defmethod body Map [request params] |
81 | 83 | (-> request |
82 | 84 | (content-type "application/x-www-form-urlencoded") |
83 | 85 | (body (encode-params params)))) |
|
99 | 101 | (defn- file? [f] |
100 | 102 | (instance? File f)) |
101 | 103 |
|
102 | | -(defn- add-multipart-part [builder k v] |
| 104 | +(defn- add-multipart-part [^MultipartEntityBuilder builder k v] |
103 | 105 | (let [param (if (map? v) v {:value v}) |
104 | 106 | value (if (string? (:value param)) |
105 | | - (.getBytes (:value param) default-charset) |
| 107 | + (.getBytes ^String (:value param) ^Charset default-charset) |
106 | 108 | (:value param)) |
107 | 109 | mimetype (ContentType/parse |
108 | 110 | (or (:content-type param) |
|
112 | 114 | "text/plain; charset=UTF-8" |
113 | 115 | "application/octet-stream"))) |
114 | 116 | filename (or (:filename param) |
115 | | - (when (file? value) (.getName ^File value)))] |
116 | | - (.addBinaryBody builder (name k) value mimetype filename))) |
| 117 | + (when (file? value) (.getName ^File value))) |
| 118 | + key-name (name k)] |
| 119 | + |
| 120 | + (cond |
| 121 | + (bytes? value) |
| 122 | + (.addBinaryBody builder ^String key-name ^bytes value |
| 123 | + ^ContentType mimetype ^String filename) |
| 124 | + (file? value) |
| 125 | + (.addBinaryBody builder ^String key-name ^File value |
| 126 | + ^ContentType mimetype ^String filename) |
| 127 | + (instance? InputStream value) |
| 128 | + (.addBinaryBody builder ^String key-name ^InputStream value |
| 129 | + ^ContentType mimetype ^String filename) |
| 130 | + :else builder))) |
117 | 131 |
|
118 | 132 | (defn- multipart-entity ^HttpEntity [params] |
119 | 133 | (let [builder (MultipartEntityBuilder/create)] |
120 | | - (.setCharset builder default-charset) |
| 134 | + (.setCharset builder ^Charset default-charset) |
121 | 135 | (doseq [[k v] params] |
122 | 136 | (add-multipart-part builder k v)) |
123 | 137 | (.build builder))) |
|
157 | 171 | ([method uri] |
158 | 172 | (request method uri nil)) |
159 | 173 | ([method uri params] |
160 | | - (let [uri (java.net.URI. uri) |
| 174 | + (let [uri (URI. uri) |
161 | 175 | scheme (keyword (or (.getScheme uri) "http")) |
162 | 176 | host (or (.getHost uri) "localhost") |
163 | 177 | port (when (not= (.getPort uri) -1) (.getPort uri)) |
|
0 commit comments