:name 属性用于给出实体的名称,即多部分的第一个内容等。
Clojure 缺少在多部分请求中添加内容 ID 的功能。但是,在 clojure 中,clj-http 客户端内部使用 http-client api 来构建多部分请求。请参阅此
链接以了解如何在 clj-http 中创建多部分。
clj-http 客户端不在任何地方使用内容 ID。所以,有一点很清楚,我们不能用 content-id 创建多部分请求。
我找到的一种解决方案,只需在 clojure 中导入 http-client 包并创建多部分请求。无需下载任何 http-client jar,因为我告诉 clj-http 使用 http-client 作为依赖项。
(: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))
只需使用以下功能模板来创建您自己的请求。并将多部分对象作为 :body 用于 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 等等。
希望它会帮助你。