In all your examples except for possibly the last, you have the multipart
middleware added twice over to your application.

Also, are you sure it's not a problem with your client code?

One thing to try is recording your HTTP request by pointing your client at
a netcat listener (e.g. "nc -l 3000"). Or writing a handler that dumps out
the headers and the contents of the request body.

- James

On 7 July 2016 at 03:18, <aaarturoz...@gmail.com> wrote:

> 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.
>

-- 
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