Skip to content

Instantly share code, notes, and snippets.

@shandanjay
Forked from nikolaplejic/core.clj
Created July 11, 2016 06:31
Show Gist options
  • Save shandanjay/a746295b6f6dbcb12c3a2ef0f77431d8 to your computer and use it in GitHub Desktop.
Save shandanjay/a746295b6f6dbcb12c3a2ef0f77431d8 to your computer and use it in GitHub Desktop.
File upload example in Compojure
(ns fileupload.core
(:use [net.cgrand.enlive-html
:only [deftemplate defsnippet content clone-for
nth-of-type first-child do-> set-attr sniptest at emit*]]
[compojure.core]
[ring.adapter.jetty])
(:require (compojure [route :as route])
(ring.util [response :as response])
(ring.middleware [multipart-params :as mp])
(clojure.contrib [duck-streams :as ds]))
(:gen-class))
(defn render [t]
(apply str t))
(deftemplate index "fileupload/index.html" [])
(deftemplate upload-success "fileupload/success.html" [])
(defn upload-file
[file]
(ds/copy (file :tempfile) (ds/file-str "file.out"))
(render (upload-success)))
(defroutes public-routes
(GET "/" [] (render (index)))
(mp/wrap-multipart-params
(POST "/file" {params :params} (upload-file (get params "file")))))
(defn start-app []
(future (run-jetty (var public-routes) {:port 8000})))
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Compojure file upload</title>
</head>
<body>
<form action="/file" method="post" enctype="multipart/form-data">
<input name="file" type="file" size="20" />
<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Compojure file upload</title>
</head>
<body>
<h1>File upload successful!</h1>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment