|
55 | 55 | (defn- parse-content-type-charset [^FileItemStream item]
|
56 | 56 | (some->> (.getContentType item) parsing/find-content-type-charset))
|
57 | 57 |
|
| 58 | +(defn- parse-file-item [^FileItemStream item store] |
| 59 | + {:field? (.isFormField item) |
| 60 | + :name (.getFieldName item) |
| 61 | + :value (if (.isFormField item) |
| 62 | + {:bytes (IOUtils/toByteArray (.openStream item)) |
| 63 | + :encoding (parse-content-type-charset item)} |
| 64 | + (store {:filename (.getName item) |
| 65 | + :content-type (.getContentType item) |
| 66 | + :stream (.openStream item)}))}) |
| 67 | + |
| 68 | +(defn- find-param [params name] |
| 69 | + (first (filter #(= name (:name %)) params))) |
| 70 | + |
58 | 71 | (defn- parse-html5-charset [params]
|
59 |
| - (when-let [charset (->> params (filter #(= (first %) "_charset_")) first second :bytes)] |
| 72 | + (when-let [charset (some-> params (find-param "_charset_") :value :bytes)] |
60 | 73 | (String. ^bytes charset "US-ASCII")))
|
61 | 74 |
|
62 |
| -(defn- decode-string-values [fallback-encoding forced-encoding params] |
63 |
| - (let [html5-encoding (parse-html5-charset params)] |
64 |
| - (for [[k v field?] params] |
65 |
| - [k (if field? |
66 |
| - (String. ^bytes (:bytes v) (str (or forced-encoding |
67 |
| - html5-encoding |
68 |
| - (:encoding v) |
69 |
| - fallback-encoding))) |
70 |
| - v)]))) |
| 75 | +(defn- decode-form-field |
| 76 | + [{:keys [bytes encoding]} forced-encoding fallback-encoding] |
| 77 | + (String. ^bytes bytes (str (or forced-encoding encoding fallback-encoding)))) |
71 | 78 |
|
72 |
| -(defn- parse-file-item [^FileItemStream item store] |
73 |
| - [(.getFieldName item) |
74 |
| - (if (.isFormField item) |
75 |
| - {:bytes (IOUtils/toByteArray (.openStream item)) |
76 |
| - :encoding (parse-content-type-charset item)} |
77 |
| - (store {:filename (.getName item) |
78 |
| - :content-type (.getContentType item) |
79 |
| - :stream (.openStream item)})) |
80 |
| - (.isFormField item)]) |
| 79 | +(defn- decode-string-values [fallback-encoding forced-encoding params] |
| 80 | + (let [forced-encoding (or forced-encoding (parse-html5-charset params))] |
| 81 | + (for [{:keys [name value field?]} params] |
| 82 | + [name (if field? |
| 83 | + (decode-form-field value forced-encoding fallback-encoding) |
| 84 | + value)]))) |
81 | 85 |
|
82 | 86 | (def ^:private default-store (delay (tf/temp-file-store)))
|
83 | 87 |
|
|
0 commit comments