如何在Scala中将InputStream转换为base64字符串?

时间:2013-02-07 14:11:35

标签: scala

尝试从Amazon S3提取图像(返回S3ObjectInputStream)并将其发送到mandrill email api(采用base64编码的字符串)。如何在Scala中完成?

3 个答案:

答案 0 :(得分:13)

我还设法只使用Apache公共资源;不知道哪种方法更好,但我想我会把这个答案留给记录:

import org.apache.commons.codec.binary.Base64
import org.apache.commons.io.IOUtils

val bytes = IOUtils.toByteArray(stream)
val bytes64 = Base64.encodeBase64(bytes)
val content = new String(bytes64)

答案 1 :(得分:6)

这是一个解决方案,可能还有其他更有效的方法。

val is = new ByteArrayInputStream(Array[Byte](1, 2, 3)) // replace by your InputStream
val stream = Stream.continually(is.read).takeWhile(_ != -1).map(_.toByte)
val bytes = stream.toArray
val b64 = new sun.misc.BASE64Encoder().encode(bytes)

您可以(也应该)使用apache commons Base64替换sun.misc编码器,以获得更好的兼容性。

val b64 = org.apache.commons.codec.binary.Base64.encodeBase64(bytes)

答案 2 :(得分:0)

这是我写的simple encoder/decoder你可以作为来源加入。所以,没有外部依赖。

界面有点夸张:

import io.github.marklister.base64.Base64._ // Same as Lomig Mégard's answer val b64 = bytes.toBase64