首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么转换为base64会导致镜像损坏?

为什么转换为base64会导致镜像损坏?
EN

Stack Overflow用户
提问于 2017-03-01 12:09:52
回答 2查看 633关注 0票数 2

我尝试使用以下代码对图像进行base64编码,然后使用第三方电子邮件服务通过电子邮件发送。

代码语言:javascript
复制
(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它允许我根据需要发送电子邮件。(当然,这不是一个解决方案,但我想确保使用相关的文件来完成我想要做的事情是可能的。)

encoded = Base64.encode64(File.read('resources/public/test.gif'))

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-01 13:53:49

首先,预计base64的大小将显著增加,但当然不会完全翻一番。

我不是一个Clojure开发者,但我相信这个问题是关于slurp + getBytes的。不幸的是,您不能只将文件作为字符串读取,然后使用.getBytes并期望获得原始文件内容,因为编码引入了各种问题。你应该直接以字节数组的形式读取文件。This SO answer建议没有这样的标准函数,但第二个答案中的slurp-bytes在我看来很有希望。

票数 4
EN

Stack Overflow用户

发布于 2017-03-01 15:40:04

请查看本周与此密切相关的问题和答案:Slurping http://foobar.mp3 that redirects to http://fizzbar.mp3 in Clojure

基本上,slurp只适用于文本文件。

有关完整信息,请将其加入书签并在浏览器tab the Clojure Cheatsheet中保持打开状态。另外,请参阅特定文档的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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42523024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档