2017-05-19 11 views
1

ファイルをs3に保存しようとしています。ファイルはSource[ByteString, Any]となっており、PutObjectRequestの場合はInputStreamに変換する必要があります。次に、内容の長さとmd5をObjectMetadataと計算します。私のコードに続いてエラーメッセージがあります。どんな入力も感謝します。ありがとう。scala akka-httpを使用してファイルをs3に保存できません

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.

答えて

4

ノンブロッキング、より多くのreactive代替Alpakka S3シンクを使用することです。

エンコードとS3プロトコルの問題はすべて解決されますが、完全にバックプレッシャが有効になり、スケーラビリティが向上します。

さらに、Sink[ByteString,_]の形式で提供されており、お客様のケースではデータの適応/変換は必要ありません。

+0

提案していただきありがとうございます。これを今試みている – perry

関連する問題