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