3

Amazon S3から画像をプルして(returns S3ObjectInputStream)、それをmandrill email api(base64でエンコードされた文字列を取得)に送信しようとしています。これはScalaでどのように行うことができますか?

4

3 に答える 3

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)
于 2013-02-07T15:21:22.417 に答える
6

これが1つの解決策ですが、おそらくもっと効率的な解決策が他にもあります。

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)

互換性を高めるために、sun.miscエンコーダーをapache commons Base64に置き換えることもできます(また、そうすべきです) 。

val b64 = org.apache.commons.codec.binary.Base64.encodeBase64(bytes)
于 2013-02-07T14:51:17.720 に答える
0

これが私が書いた単純なエンコーダー/デコーダーで、ソースとして含めることができます。したがって、外部依存関係はありません。

インターフェイスはもう少しスカラ風です:

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

于 2014-03-01T12:54:36.413 に答える