ファイルを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,_]
そのため、お客様のケースでさらにデータを適応/変換する必要はありません。