/ / scala akka-httpを使用してs3にファイルを保存できない-scala、amazon-web-services、amazon-s3、akka、akka-http

scala akka-http-scala、amazon-web-services、amazon-s3、akka、akka-httpを使用してs3にファイルを保存できません

ファイルをs3に保存しようとしています。ファイルは Source[ByteString, Any] に変換する必要があります InputStream のために PutObjectRequest。その後、計算 ObjectMetadata コンテンツの長さとmd5。ここに、エラーコードが続きます。入力をお願いします。ありがとう。

def uploadFile(source: Source[ByteString, _]) = {

val stream: InputStream = source.runWith(StreamConverters.asInputStream(FiniteDuration(3, TimeUnit.SECONDS)))

val metadata = new ObjectMetadata()
metadata.setContentLength(IOUtils.toByteArray(stream).length)
metadata.setContentMD5(Base64.encodeBase64(DigestUtils.md5(stream)).toString)

s3.putObject(new PutObjectRequest("bucketName", "key", stream, metadata))
}

スタックトレースエラーメッセージ: com.amazonaws.services.s3.model.AmazonS3Exception with message The Content-MD5 you specified was invalid.

回答:

回答№1は4

ノンブロッキング、もっと 反応性の 代わりに使用することです アルパッカS3 シンク。

エンコーディングとS3プロトコルのすべての問題を解決するだけでなく、拡張性を高めるために完全にバックプレッシャー対応になります。

さらに、それはの形で来ます Sink[ByteString,_] そのため、お客様のケースでさらにデータを適応/変換する必要はありません。