如何在Clojure Compojure / Ring项目中获取`HttpInputOverHTTP`的内容?

时间:2017-03-16 09:10:07

标签: clojure

如何在Compojure / Ring项目中获取传入的POST http请求:body #object[org.eclipse.jetty.server.HttpInputOverHTTP 0x42c3599b "HttpInputOverHTTP@42c3599b"]的内容?

我知道此:body由名为dataMIME-typetext-plain的部分和另一部分excel MIME-type组成。是application/excel

slurp编辑了:body的内容,它显示: enter image description here

3 个答案:

答案 0 :(得分:2)

手动解析二进制流很困难。按如下方式包装您的处理程序:

(wrap-multipart-params handler options)

此中间件解析正文并使用已解析的数据填充:params参数。

有关详细信息,请参阅ring.middleware.multipart-params文档。

答案 1 :(得分:0)

您可以找到我强烈推荐的基本示例in the Clojure Cookbook (O'Reilly)

(ns ringtest
  (:require
    [ring.adapter.jetty :as jetty]
    clojure.pprint))

;; Echo (with pretty-print) the request received
(defn handler [request]
  {:status 200
   :headers {"content-type" "text/clojure"}
   :body (with-out-str (clojure.pprint/pprint request))})

(defn -main []
  ;; Run the server on port 3000
  (jetty/run-jetty handler {:port 3000}))

答案 2 :(得分:0)

我在 Reitit 中看到它,对我来说修复的是更改中间件的顺序,因此 exception-middlewaremultipart/multipart-middleware 之后。

:middleware [;; multipart
             multipart/multipart-middleware
             ;; exception handling
             exception-middleware]