为什么转换为base64时图像损坏?
Why is image corrupted when converted to base64?
我正在尝试使用以下代码对图像进行 base64 编码,然后使用第三方电子邮件服务将其通过电子邮件发送。
(ns application.encode
(:import org.apache.commons.codec.binary.Base64)
(:require [clojure.java.io :as io]))
(defn encode [file-path]
(let [content (String.
(Base64/encodeBase64
(.getBytes
(slurp (clojure.java.io/resource "public/test.gif")))))]
;; email file contents
)
但是,图像已损坏并且其大小已加倍。我可以通过电子邮件发送或spit
将其发送到本地文件来验证这一点。
我做错了什么?
更新:如果它有用,下面的 Ruby 代码会执行我在上面尝试做的事情并将其输出写入文件,然后 slurp
ing 它允许我发送根据需要发送电子邮件。 (当然,这不是解决方案,但我想确保我正在尝试做的事情甚至可以使用有问题的文件。)
encoded = Base64.encode64(File.read('resources/public/test.gif'))
首先,base64 的大小预计会显着增加,但当然不会完全翻倍。
我不是 Clojure 开发人员,但我相信这个问题存在 slurp
+ getBytes
。不幸的是,由于编码引入的各种问题,您不能只将文件作为字符串读取并使用 .getBytes
并期望获得原始文件内容。您应该直接将文件作为字节数组读取。 This SO answer 建议没有这样的标准功能,但第二个答案的 slurp-bytes
对我来说很有希望。
请查看本周这个密切相关的问题和答案:Slurping http://foobar.mp3 that redirects to http://fizzbar.mp3 in Clojure
基本上,slurp
仅适用于文本文件。
如需完整信息,请收藏并在浏览器中保持打开状态tab the Clojure Cheatsheet. Also, see the specific docs for the slurp function。
可以在 Clojure Cookbook 中找到一个很好的例子:https://github.com/clojure-cookbook/clojure-cookbook/blob/master/04_local-io/4-19_handle-binary-files.asciidoc
可以在 ClojureDocs 上找到更多示例:https://clojuredocs.org/clojure.java.io/input-stream
我正在尝试使用以下代码对图像进行 base64 编码,然后使用第三方电子邮件服务将其通过电子邮件发送。
(ns application.encode
(:import org.apache.commons.codec.binary.Base64)
(:require [clojure.java.io :as io]))
(defn encode [file-path]
(let [content (String.
(Base64/encodeBase64
(.getBytes
(slurp (clojure.java.io/resource "public/test.gif")))))]
;; email file contents
)
但是,图像已损坏并且其大小已加倍。我可以通过电子邮件发送或spit
将其发送到本地文件来验证这一点。
我做错了什么?
更新:如果它有用,下面的 Ruby 代码会执行我在上面尝试做的事情并将其输出写入文件,然后 slurp
ing 它允许我发送根据需要发送电子邮件。 (当然,这不是解决方案,但我想确保我正在尝试做的事情甚至可以使用有问题的文件。)
encoded = Base64.encode64(File.read('resources/public/test.gif'))
首先,base64 的大小预计会显着增加,但当然不会完全翻倍。
我不是 Clojure 开发人员,但我相信这个问题存在 slurp
+ getBytes
。不幸的是,由于编码引入的各种问题,您不能只将文件作为字符串读取并使用 .getBytes
并期望获得原始文件内容。您应该直接将文件作为字节数组读取。 This SO answer 建议没有这样的标准功能,但第二个答案的 slurp-bytes
对我来说很有希望。
请查看本周这个密切相关的问题和答案:Slurping http://foobar.mp3 that redirects to http://fizzbar.mp3 in Clojure
基本上,slurp
仅适用于文本文件。
如需完整信息,请收藏并在浏览器中保持打开状态tab the Clojure Cheatsheet. Also, see the specific docs for the slurp function。
可以在 Clojure Cookbook 中找到一个很好的例子:https://github.com/clojure-cookbook/clojure-cookbook/blob/master/04_local-io/4-19_handle-binary-files.asciidoc
可以在 ClojureDocs 上找到更多示例:https://clojuredocs.org/clojure.java.io/input-stream