|
112 | 112 | func (load-var store)] |
113 | 113 | (func)))) |
114 | 114 |
|
115 | | -(defn default-invalid-filename-handler [request e] |
116 | | - (response/bad-request (.getMessage e))) |
117 | | - |
118 | 115 | (defn multipart-params-request |
119 | 116 | "Adds :multipart-params and :params keys to request. |
120 | 117 | See: wrap-multipart-params." |
121 | 118 | {:added "1.2"} |
122 | 119 | ([request] |
123 | 120 | (multipart-params-request request {})) |
124 | 121 | ([request options] |
125 | | - (try |
126 | | - (let [store (or (:store options) @default-store) |
127 | | - forced-encoding (:encoding options) |
128 | | - req-encoding (or forced-encoding |
129 | | - (:fallback-encoding options) |
130 | | - (req/character-encoding request) |
131 | | - "UTF-8") |
132 | | - progress (:progress-fn options) |
133 | | - params (if (multipart-form? request) |
134 | | - (parse-multipart-params request |
135 | | - req-encoding |
136 | | - forced-encoding |
137 | | - store |
138 | | - progress) |
139 | | - {})] |
140 | | - (merge-with merge request |
141 | | - {:multipart-params params} |
142 | | - {:params params})) |
143 | | - (catch InvalidFileNameException e |
144 | | - (let [invalid-filename-handler |
145 | | - (:invalid-filename-handler options default-invalid-filename-handler)] |
146 | | - (with-meta (invalid-filename-handler request e) {::error? true})))))) |
| 122 | + (let [store (or (:store options) @default-store) |
| 123 | + forced-encoding (:encoding options) |
| 124 | + req-encoding (or forced-encoding |
| 125 | + (:fallback-encoding options) |
| 126 | + (req/character-encoding request) |
| 127 | + "UTF-8") |
| 128 | + progress (:progress-fn options) |
| 129 | + params (if (multipart-form? request) |
| 130 | + (parse-multipart-params request |
| 131 | + req-encoding |
| 132 | + forced-encoding |
| 133 | + store |
| 134 | + progress) |
| 135 | + {})] |
| 136 | + (merge-with merge request |
| 137 | + {:multipart-params params} |
| 138 | + {:params params})))) |
| 139 | + |
| 140 | +(defn default-invalid-filename-handler [request e] |
| 141 | + (response/bad-request (.getMessage e))) |
147 | 142 |
|
148 | 143 | (defn wrap-multipart-params |
149 | 144 | "Middleware to parse multipart parameters from a request. Adds the |
|
184 | 179 | - A function that gets called when the file being uploaded |
185 | 180 | has an invalid name. The function should expect two |
186 | 181 | parameters: request and an exception of type |
187 | | - InvalidFileNameException." |
| 182 | + InvalidFileNameException. It should return a ring response." |
188 | 183 | ([handler] |
189 | 184 | (wrap-multipart-params handler {})) |
190 | 185 | ([handler options] |
191 | 186 | (fn |
192 | 187 | ([request] |
193 | | - (let [multipart-params-request (multipart-params-request request options)] |
194 | | - (if (contains? (meta multipart-params-request) ::error?) |
195 | | - multipart-params-request |
196 | | - (handler multipart-params-request)))) |
| 188 | + (let [req-or-ex (try |
| 189 | + (multipart-params-request request options) |
| 190 | + (catch Exception ex ex)) |
| 191 | + invalid-filename-handler |
| 192 | + (:invalid-filename-handler options default-invalid-filename-handler)] |
| 193 | + (if (instance? Throwable req-or-ex) |
| 194 | + (invalid-filename-handler request req-or-ex) |
| 195 | + (handler req-or-ex)))) |
197 | 196 | ([request respond raise] |
198 | | - (let [multipart-params-request (multipart-params-request request options)] |
199 | | - (if (contains? (meta multipart-params-request) ::error?) |
200 | | - (handler multipart-params-request respond raise) |
201 | | - (respond multipart-params-request))))))) |
| 197 | + (let [req-or-ex (try |
| 198 | + (multipart-params-request request options) |
| 199 | + (catch Exception ex ex)) |
| 200 | + invalid-filename-handler |
| 201 | + (:invalid-filename-handler options default-invalid-filename-handler)] |
| 202 | + (if (instance? Throwable req-or-ex) |
| 203 | + (respond (invalid-filename-handler request req-or-ex)) |
| 204 | + (handler req-or-ex respond raise))))))) |
0 commit comments