It's because you apply wrap-multipart-params twice. First with the default arguments, then with your custom store. The first application of the function is via compojure.handler/site. If you remove that, or use handler/api instead, or apply the parameter middleware yourself, your code should work as expected.
- James On 1 April 2014 19:15, K Livingston <kevinlivingston.pub...@gmail.com>wrote: > Sorry, I just realized there's a ring-specific mailing list - apologies > for the clutter. > Moved: > https://groups.google.com/d/topic/ring-clojure/O5HoT-UIWfk/discussion > > > On Tuesday, April 1, 2014 12:02:26 PM UTC-6, K Livingston wrote: >> >> I'm having trouble using a custom :store with multipart-params. I >> thought I did exactly what the documentation indicates, but I'm getting the >> default behavior. >> >> http://ring-clojure.github.io/ring/ring.middleware.multipart-params.html >> >> :store - a function that stores a file upload. The function should >> expect a map with :filename, content-type and :stream keys, >> and its return value will be used as the value for the >> parameter in the multipart parameter map. The default storage >> function is the temp-file-store. >> >> >> >> (mp/wrap-multipart-params >> (POST "/upload-x" request (upload/upload-file request)) >> {:store upload/logging-store}) >> >> My logging store function looks like this (it's just a dummy for now - >> eventually I want to handle the stream in a custom way) None of that IO >> happens. >> >> (defn logging-store [{filename :filename >> content-type :content-type >> stream :stream >> :as params}] >> (println "in logging store") >> (pprint filename) >> (pprint params) >> filename) >> >> upload-file looks like this: >> >> (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}))) >> >> The printing for the request and the params clearly show the multipart >> params in there and that they are being handled by the temp file store: >> >> :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"}}, >> >> >> >> cross post here (if you want stack overflow points): >> http://stackoverflow.com/questions/22792577/using-a- >> custom-store-with-wrap-multipart-params-in-ring-middle-ware >> > -- > 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.