🐛 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,15 +18,30 @@
(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
[f]
(rx/create
(fn [subs]
(let [reader (js/FileReader.)]
(obj/set! reader "onload" #(do (rx/push! subs (.-result ^js reader))
(obj/set! reader "onload"
#(let [result (.-result ^js reader)
result (fix-webkit-data-uri result)]
(rx/push! subs result)
(rx/end! subs)))
(obj/set! reader "onerror" #(rx/error! subs %))
(obj/set! reader "onabort" #(rx/error! subs (ex/error :type :internal
(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)