This is the link to the question in stackoverflow:
http://stackoverflow.com/questions/38226276/cant-extract-multipart-params-from-post-request-in-compojure

在 2016年7月7日星期四 UTC+8上午10:13:25,aaartu...@gmail.com写道:
>
> When I try to extract the multipart-params from a POST request like this:
>
> (defroutes upload-routes
>   (POST "/upload" {params :params} (println params))
>
>
> I got {}.
>
> Then I tried like this:
>
> (defroutes upload-routes
>   (POST "/upload" {multipart-params :multipart-params} (println 
> multipart-params))
>
> I still got {}.
>
> I guess there are something wrong about my middleware.
>
> So I tried to change the handler, here are the handlers I had tried:
>
> (ns cloudserver.handler
>   (:require [compojure.core :refer [defroutes routes]]
>             [compojure.route :as route]
>             [compojure.handler :as handler]
>             [cloudserver.routes.home :refer [home-routes]]
>             [noir.util.middleware :as noir-middleware]
>             [cloudserver.routes.auth :refer [auth-routes]]
>             [cloudserver.routes.upload :refer [upload-routes]]
>             [cloudserver.routes.search :refer [search-routes]]
>             [cloudserver.routes.download :refer [download-routes]]
>             [ring.middleware.defaults :refer [api-defaults wrap-defaults 
> site-defaults]]
>             [ring.middleware.multipart-params :refer [wrap-multipart-params]]
>             [ring.middleware.params :refer [wrap-params]]
>             [noir.session :as session]
>             [ring.middleware.session.memory :refer [memory-store]]))
>
> (def app
>   (->
>    (routes auth-routes
>            home-routes
>            upload-routes
>            search-routes
>            download-routes
>            app-routes)
>    session/wrap-noir-session
>    (wrap-defaults(assoc-in site-defaults [:security :anti-forgery] false)
>    wrap-multipart-params
>    wrap-params))
> (def app
>   (->
>    (routes auth-routes
>            home-routes
>            upload-routes
>            search-routes
>            download-routes
>            app-routes)
>    session/wrap-noir-session
>    (wrap-defaults(assoc-in site-defaults [:security :anti-forgery] false)
>    wrap-multipart-params))
> (def app
>   (->
>    (routes auth-routes
>            home-routes
>            upload-routes
>            search-routes
>            download-routes
>            app-routes)
>    session/wrap-noir-session
>    (wrap-defaults (-> site-defaults
>                       (assoc-in [:security :anti-forgery] false)
>                       (assoc-in [:params :multipart] true)
>                       (assoc-in [:params :nested] true)))
>    handler/site))
> (def app
>   (->
>    (routes auth-routes
>            home-routes
>            upload-routes
>            search-routes
>            download-routes
>            app-routes)
>    wrap-multipart-params
>    session/wrap-noir-session
>    (wrap-defaults(assoc-in site-defaults [:security :anti-forgery] false)))
> (def app
>   (noir-middleware/app-handler
>    [auth-routes
>     home-routes
>     upload-routes
>     search-routes
>     download-routes
>     app-routes]
>    :ring-defaults (assoc site-defaults :security nil)))
>
> But the only result I got is {}
> ------------------------------
>
> My client code is:
>
> public int upload (String filename, String[] tags, String time, String 
> fingerprint) throws IOException {
>     String url = host + "/upload";
>     CloseableHttpClient httpClient = 
> HttpClients.custom().setDefaultCookieStore(cookieStore).build(); 
>     HttpPost httpPost =  new HttpPost(url);
>
>     MultipartEntityBuilder mulentity = MultipartEntityBuilder.create();
>
>     mulentity.addBinaryBody("photo", new File(filename));
>
>     for (int i = 0; i < tags.length; i ++) {
>         mulentity.addTextBody("tag" + i, tags[i]);
>     }
>
>     mulentity.addTextBody("fingerprint", fingerprint);
>     mulentity.addTextBody("time", time);
>     mulentity.addTextBody("filename", 
> filename.substring(filename.lastIndexOf(File.separatorChar) + 1, 
> filename.length()));
>
>     HttpEntity entity = mulentity.build();
>     httpPost.setEntity(entity);
>     httpPost.setHeader("Content-Type", "multipart/form-data;boundary=" + 
> BOUNDARY);
>
>     int status = 3;
>
>     try {
>         ResponseHandler<String> responseHandler = new BasicResponseHandler();
>         String response = httpClient.execute(httpPost, responseHandler);
>         status = Integer.parseInt(response);
>     } catch (ClientProtocolException e) {
>         e.printStackTrace();
>     } catch (UnsupportedEncodingException e) {
>         e.printStackTrace();
>     } finally {
>         httpClient.close();
>     }
>     return status;
> }
>
> ------------------------------
>
> I am really a green hand in clojure web programming. Thanks a lot!
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to