gpt4 book ai didi

clojure - 使用 Clojure 将 base64 编码的文件解码回原始格式

转载 作者:行者123 更新时间:2023-12-02 17:51:52 28 4
gpt4 key购买 nike

如何将经过 Base64 编码的文件转换回其原始格式并将其写入磁盘?例如,我有一个已进行 mime64 编码的 pdf 文件。文件开头为:

data:application/pdf;base64,JVBER

我想以正确的格式将其写入磁盘。我已经尝试了几个将字符串解码为字节数组的库(例如ring.util.codec),但是如果我将生成的字节数组写入文件(使用spit),则文件会显示损坏。

更新:

PHP 函数 base64_decode 似乎正在执行我正在寻找的操作,因为它返回一个字符串。 Java 中的等价物是什么?

最佳答案

在 Clojure 中,有 data.codec (以前在 clojure-contrib 中)。

使用 Java 互操作性:

这些是我在使用 data.codec 时用于图像的辅助函数:

(require '[clojure.data.codec.base64 :as b64-codec])

(defn write-img! [id b64]
(clojure.java.io/copy
(decode-str (chop-header b64))
(java.io.File. (str "/Users/nha/tmp/" id "." (b64-ext b64)))))

(defn decode-str [s]
(b64-codec/decode (.getBytes s)))

(defn in?
"true if the seq coll contains the element el"
[coll el]
(some #(= el %) coll))

(defn b64-ext [s]
(if-let [ext (second (first (re-seq #"data:image/(.*);base64.*" s)))]
(if (in? ["png" "jpeg"] ext)
ext
(throw (Exception. (str "Unsupported extension found for image " ext))))
(throw (Exception. (str "No extension found for image " s)))))

(defn chop-header [s]
(nth (first (re-seq #"(data:image/.*;base64,)(.*)" s)) 2))

关于clojure - 使用 Clojure 将 base64 编码的文件解码回原始格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7141603/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com