Permalink
Browse files

Added temp-file-store as default multipart file store

  • Loading branch information...
1 parent dd15fa2 commit 192862dbc382314e6a0c0c41d3032cc5a399500e @weavejester weavejester committed Feb 26, 2011
View
13 ring-core/src/ring/middleware/multipart_params.clj
@@ -56,6 +56,16 @@
[(.getFieldName item)
(parse-file-item item store)])))
+(defn- load-var
+ "Returns the var named by the supplied symbol, or nil if not found. Attempts
+ to load the var namespace on the fly if not already loaded."
+ [sym]
+ (require (symbol (namespace sym)))
+ (find-var sym))
+
+(def default-store
+ 'ring.middleware.multipart-params.temp-file/temp-file-store)
+
(defn wrap-multipart-params
"Middleware to parse multipart parameters from a request. Adds the
following keys to the request map:
@@ -71,7 +81,8 @@
(let [encoding (or (:encoding opts)
(:character-encoding request)
"UTF-8")
- store (:store opts byte-array-store)
+ store (or (:store opts)
+ (load-var default-store))
params (if (multipart-form? request)
(parse-multipart-params request encoding store)
{})
View
12 ring-core/src/ring/middleware/multipart_params/temp_file.clj
@@ -0,0 +1,12 @@
+(ns ring.middleware.multipart-params.temp-file
+ (:require [clojure.java.io :as io])
+ (:import java.io.File))
+
+(defn temp-file-store
+ "Stores multipart file parameters as a temporary file."
+ [item]
+ (let [temp-file (File/createTempFile "ring-multipart-" "")]
+ (with-open [out (io/output-stream temp-file)]
+ (io/copy (:stream item) out))
+ (-> (select-keys item [:filename :content-type])
+ (assoc :temp-file temp-file))))

0 comments on commit 192862d

Please sign in to comment.