1
我试图使用自定义:store
选项wrap-multipart-params
,而是我很明显得到默认存储。我的自定义函数甚至没有被调用。使用自定义:存储与环中间件包装multipart-params
(mp/wrap-multipart-params
(POST "/upload-x" request (upload/upload-file request))
{:store upload/logging-store})
我的日志存储功能看起来是这样的(它只是现在一个虚拟的 - 最终我想处理一个自定义的方式流)是IO没有发生。
(defn logging-store [{filename :filename
content-type :content-type
stream :stream
:as params}]
(println "in logging store")
(pprint filename)
(pprint params)
filename)
上传文件看起来是这样的:
(defn upload-file [{params :params
session :session :as request}]
(let [user-id (:user-id session)
files (get params "files")]
(pprint request)
(pprint params)
(response/response
{:status :success})))
该请求的打印和PARAMS显然在那里,他们正在临时文件存储处理,显示多PARAMS:
:multipart-params
{"files"
{:size 1674,
:tempfile
#<File /var/folders/rx/9ntjyyvs35qbmcbp6rhfmj200000gn/T/ring-multipart-3853352501927893381.tmp>,
:content-type "application/octet-stream",
:filename "blog-test.clj"}},
编辑:应用程序定义(如需要)
(defroutes file-list-routes
(GET "/simple-upload" request (upload/simple-upload-file request))
(mp/wrap-multipart-params
(POST "/upload-x" request (upload/upload-file request))
{:store upload/logging-store})
)
(defroutes scratch-app
(context "/files" request file-list-routes)
(route/resources "/")
(route/not-found "Page not found"))
(def my-app
(handler/site
(ring.middleware.json/wrap-json-response
(ring.middleware.json/wrap-json-params
(ring.middleware.stacktrace/wrap-stacktrace
(ring.middleware.session/wrap-session
scratch-app
{:store (ring.middleware.session.memory/memory-store all-the-sessions)
:cookie-attrs {:max-age 3600 ;in s 3600s = 1h
}}))))))
(ring.util.servlet/defservice my-app)
Arg,我甚至去寻找类似的东西......没想到要去那里看看。看起来有些参数可以通过多部分参数(假设它们对于整个站点来说是相同的)。 – DrLivingston
为什么首先应用默认的参数,这看起来有点儿内在? – DrLivingston