🐛 Add workaround for webkit issue on fileReader (#6697)

On reading blob as data uri
This commit is contained in:
Andrey Antukh 2025-06-17 15:25:58 +02:00 committed by GitHub
parent acf0d02c5d
commit c5b0206bf0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -18,17 +18,32 @@
(log/set-level! :warn) (log/set-level! :warn)
;; NOTE: this operation is necessary because some versions of safari/webkit,
;; returns something like "data:image/png, image/png;base64,iVBOR" (repeated
;; mimetype). The regex replacement strips the repeated mimetype.
(def webkit-datauri-fix-re
#"^(data:image/\w+)(,\s*image/\w+)?(;base64.*)$")
(defn- fix-webkit-data-uri
[duri]
(str/replace duri webkit-datauri-fix-re "$1$3"))
(defn- file-reader (defn- file-reader
[f] [f]
(rx/create (rx/create
(fn [subs] (fn [subs]
(let [reader (js/FileReader.)] (let [reader (js/FileReader.)]
(obj/set! reader "onload" #(do (rx/push! subs (.-result ^js reader)) (obj/set! reader "onload"
(rx/end! subs))) #(let [result (.-result ^js reader)
(obj/set! reader "onerror" #(rx/error! subs %)) result (fix-webkit-data-uri result)]
(obj/set! reader "onabort" #(rx/error! subs (ex/error :type :internal (rx/push! subs result)
:code :abort (rx/end! subs)))
:hint "operation aborted"))) (obj/set! reader "onerror"
#(rx/error! subs %))
(obj/set! reader "onabort"
#(rx/error! subs (ex/error :type :internal
:code :abort
:hint "operation aborted")))
(f reader) (f reader)
(fn [] (fn []
(.abort ^js reader)))))) (.abort ^js reader))))))