Amazon S3から画像をプルして(returns S3ObjectInputStream
)、それをmandrill email api(base64でエンコードされた文字列を取得)に送信しようとしています。これはScalaでどのように行うことができますか?
質問する
11111 次
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 に答える