Skip to content

Instantly share code, notes, and snippets.

@drpventura
Created December 6, 2016 03:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save drpventura/2ce1d13185841c0e93216f7a9c93d877 to your computer and use it in GitHub Desktop.
Save drpventura/2ce1d13185841c0e93216f7a9c93d877 to your computer and use it in GitHub Desktop.
Example for figuring out how file upload works.
(ns file-upload.handler
(:require [compojure.core :refer :all]
[compojure.route :as route]
[ring.middleware.defaults :refer [wrap-defaults site-defaults]]
[ring.middleware.params :refer [wrap-params]]
[ring.middleware.multipart-params :refer [wrap-multipart-params]]
[ring.middleware.reload :refer [wrap-reload]]
[ring.adapter.jetty :refer [run-jetty]]
[hiccup.core :refer [html]]))
(defn home-page []
(html [:form {:action "/file" :method "post" :enctype "multipart/form-data"}
[:input {:name "file" :type "file" :size "20"}]
[:input {:type "submit" :name "submit" :value "submit"}]]))
(defn upload-file [file]
(let [file-name (file :filename)
size (file :size)]
(do
(prn file)
{:status 200
:headers {"Content-Type" "text/html"}
:body (html [:h1 (str file)]
[:h1 size])})))
(defroutes
app-routes
(GET "/" [] (home-page))
(POST "/file" {params :params}
(let [file (get params "file")]
(upload-file file)))
(route/not-found "Not Found"))
(def app
(-> app-routes
wrap-params
wrap-multipart-params
wrap-reload))
(defonce server (run-jetty #'app {:port 8080 :join? false}))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment