|
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)
|
|
113 | 115 | "application/octet-stream")))
|
114 | 116 | filename (or (:filename param)
|
115 | 117 | (when (file? value) (.getName ^File value)))]
|
116 |
| - (.addBinaryBody builder (name k) value mimetype filename))) |
| 118 | + |
| 119 | + (cond |
| 120 | + (bytes? value) (.addBinaryBody builder ^String (name k) ^"[B" value ^ContentType mimetype ^String filename) |
| 121 | + (file? value) (.addBinaryBody builder ^String (name k) ^File value ^ContentType mimetype ^String filename) |
| 122 | + (instance? InputStream value) (.addBinaryBody builder ^String (name k) ^InputStream value ^ContentType mimetype ^String filename) |
| 123 | + :else |
| 124 | + builder |
| 125 | + ))) |
117 | 126 |
|
118 | 127 | (defn- multipart-entity ^HttpEntity [params]
|
119 | 128 | (let [builder (MultipartEntityBuilder/create)]
|
120 |
| - (.setCharset builder default-charset) |
| 129 | + (.setCharset builder ^Charset default-charset) |
121 | 130 | (doseq [[k v] params]
|
122 | 131 | (add-multipart-part builder k v))
|
123 | 132 | (.build builder)))
|
|
157 | 166 | ([method uri]
|
158 | 167 | (request method uri nil))
|
159 | 168 | ([method uri params]
|
160 |
| - (let [uri (java.net.URI. uri) |
| 169 | + (let [uri (URI. uri) |
161 | 170 | scheme (keyword (or (.getScheme uri) "http"))
|
162 | 171 | host (or (.getHost uri) "localhost")
|
163 | 172 | port (when (not= (.getPort uri) -1) (.getPort uri))
|
|
0 commit comments