: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