Skip to content

Commit c62702a

Browse files
authored
Merge pull request #483 from ring-clojure/fileupload2
Replace FileUpload 1.5 with FileUpload 2.0.0-M1
2 parents 371c452 + e9a4d51 commit c62702a

File tree

3 files changed

+21
-22
lines changed

3 files changed

+21
-22
lines changed

ring-core/project.clj

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,12 @@
77
:dependencies [[org.clojure/clojure "1.7.0"]
88
[ring/ring-codec "1.2.0"]
99
[commons-io "2.13.0"]
10-
[commons-fileupload "1.5"]
10+
[org.apache.commons/commons-fileupload2-core "2.0.0-M1"]
1111
[crypto-random "1.2.1"]
1212
[crypto-equality "1.0.1"]]
1313
:aliases {"test-all" ["with-profile" "default:+1.8:+1.9:+1.10:+1.11" "test"]}
1414
:profiles
15-
{:provided {:dependencies [[javax.servlet/servlet-api "2.5"]]}
16-
:dev {:dependencies [[clj-time "0.15.2"]
17-
[javax.servlet/servlet-api "2.5"]]}
15+
{:dev {:dependencies [[clj-time "0.15.2"]]}
1816
:1.8 {:dependencies [[org.clojure/clojure "1.8.0"]]}
1917
:1.9 {:dependencies [[org.clojure/clojure "1.9.0"]]}
2018
:1.10 {:dependencies [[org.clojure/clojure "1.10.3"]]}

ring-core/src/ring/middleware/multipart_params.clj

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@
1111
[ring.util.codec :refer [assoc-conj]]
1212
[ring.util.request :as req]
1313
[ring.util.parsing :as parsing])
14-
(:import [org.apache.commons.fileupload
15-
UploadContext
16-
FileItemStream
17-
FileUpload
18-
FileUploadBase$FileUploadIOException
14+
(:import [org.apache.commons.fileupload2.core
15+
AbstractFileUpload
16+
RequestContext
17+
FileItemInput
18+
FileUploadException
1919
ProgressListener]
2020
[org.apache.commons.io IOUtils]))
2121

@@ -24,46 +24,47 @@
2424
(update [_ bytes-read content-length item-count]
2525
(progress-fn request bytes-read content-length item-count))))
2626

27-
(defn- set-progress-listener [^FileUpload upload request progress-fn]
27+
(defn- set-progress-listener [^AbstractFileUpload upload request progress-fn]
2828
(when progress-fn
2929
(.setProgressListener upload (progress-listener request progress-fn))))
3030

3131
(defn- file-upload [request {:keys [progress-fn max-file-size]}]
32-
(doto (FileUpload.)
33-
(.setFileSizeMax (or max-file-size -1))
32+
(doto (proxy [AbstractFileUpload] [])
33+
;; There seems to be an off-by-one bug in FileUpload 2.0.0-M1 that requires
34+
;; us to increment the max-file-size option to get it to work correctly.
35+
(.setFileSizeMax (if max-file-size (inc max-file-size) -1))
3436
(set-progress-listener request progress-fn)))
3537

3638
(defn- multipart-form? [request]
3739
(= (req/content-type request) "multipart/form-data"))
3840

39-
(defn- request-context ^UploadContext [request encoding]
40-
(reify UploadContext
41+
(defn- request-context ^RequestContext [request encoding]
42+
(reify RequestContext
4143
(getContentType [_] (get-in request [:headers "content-type"]))
4244
(getContentLength [_] (or (req/content-length request) -1))
43-
(contentLength [_] (or (req/content-length request) -1))
4445
(getCharacterEncoding [_] encoding)
4546
(getInputStream [_] (:body request))))
4647

47-
(defn- file-item-iterable [^FileUpload upload context]
48+
(defn- file-item-iterable [^AbstractFileUpload upload ^RequestContext context]
4849
(reify Iterable
4950
(iterator [_]
5051
(let [it (.getItemIterator upload context)]
5152
(reify java.util.Iterator
5253
(hasNext [_] (.hasNext it))
5354
(next [_] (.next it)))))))
5455

55-
(defn- parse-content-type-charset [^FileItemStream item]
56+
(defn- parse-content-type-charset [^FileItemInput item]
5657
(some->> (.getContentType item) parsing/find-content-type-charset))
5758

58-
(defn- parse-file-item [^FileItemStream item store]
59+
(defn- parse-file-item [^FileItemInput item store]
5960
{:field? (.isFormField item)
6061
:name (.getFieldName item)
6162
:value (if (.isFormField item)
62-
{:bytes (IOUtils/toByteArray (.openStream item))
63+
{:bytes (IOUtils/toByteArray (.getInputStream item))
6364
:encoding (parse-content-type-charset item)}
6465
(store {:filename (.getName item)
6566
:content-type (.getContentType item)
66-
:stream (.openStream item)}))})
67+
:stream (.getInputStream item)}))})
6768

6869
(defn- find-param [params name]
6970
(first (filter #(= name (:name %)) params)))
@@ -133,7 +134,7 @@
133134
((try
134135
(let [request (requestf)]
135136
#(handlef request))
136-
(catch FileUploadBase$FileUploadIOException _
137+
(catch FileUploadException _
137138
errorf)
138139
(catch clojure.lang.ExceptionInfo _
139140
errorf))))

ring-core/test/ring/middleware/test/multipart_params.clj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@
192192
handler (constantly {:status 200, :headers {}, :body "OK"})
193193
handler-async (fn [_ respond _]
194194
(respond {:status 200, :headers {}, :body "OK"}))]
195-
(is (thrown? org.apache.commons.fileupload.FileUploadBase$FileUploadIOException
195+
(is (thrown? org.apache.commons.fileupload2.core.FileUploadException
196196
(multipart-params-request
197197
{:headers headers, :body (string-input-stream form-body)}
198198
{:max-file-size 6})))

0 commit comments

Comments
 (0)