:name屬性用於給出實體的名稱,即multipart的第1個內容等等。
Clojure缺少這個功能來添加多部分請求中的內容ID。 但是,在clojure中,clj-http客戶端在內部使用http-client api來構建多部分請求。請參閱this 關於如何在clj-http中創建多部分的鏈接。
clj-http client沒有在任何地方使用內容id。因此,有一點很清楚,我們無法使用content-id創建 多部分請求。
我發現的一個解決方案,只需在clojure中導入http-client包並創建多部分請求。無需下載任何http-client jar,因爲我使用http-client作爲依賴項告訴clj-http。
(:import (java.nio.charset Charset)
(org.apache.http.entity.mime MultipartEntity)
(org.apache.http.entity.mime FormBodyPart)
(org.apache.http.entity.mime HttpMultipartMode)
(org.apache.http.entity.mime.content
ByteArrayBody
FileBody
InputStreamBody
StringBody))
只需使用下面的函數模板來創建您自己的請求。 並將多部分對象設置爲:http請求的主體。 但是,這不是純粹的clojure實現。這是臨時解決方案。
(defn build-form-body [formbody content cid]
(let [sb (StringBody. content "text/xml" (Charset/forName "utf-8"))]
(let [fb (FormBodyPart. formbody , sb)]
(.addField fb "Content-Id" cid)
fb)))
(defn build-multipart []
(let [mp-entity (MultipartEntity.)]
(.addPart mp-entity (make-form-body "formbody1" Xml1 "content-id1-val"))
(.addPart mp-entity (make-form-body "formbody2" Xml2 "content-id1-val2"))
mp-entity))
注意:給出正確的內容類型。在我的情況下,它是XML,所以對我來說「text/xml」和字符串正文。 如果文件然後內容類型將更改並使用FileBody等。
希望它能幫助你。
我們已經嘗試過這個選項,但它不工作.https://github.com/dakrone/clj-http/blob/master/src/clj_http/multipart.clj ----- multipart.clj的鏈接api ,沒有使用content-id來創建多部分請求。是否有任何其他方式將content-id添加到多部分請求 – Jitendra