尝试将文件保存到s3。文件以Source[ByteString, Any]
形式进入,因此必须将其转换为InputStream
的{{1}}。然后计算PutObjectRequest
内容长度和md5。这是我的代码,后面是错误消息。任何输入将不胜感激。感谢。
ObjectMetadata
堆栈跟踪错误消息: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))
}
答案 0 :(得分:4)
非阻止,更多reactive替代方案是使用Alpakka S3接收器。
它可以为您解决所有编码和S3协议问题,而且它将完全支持背压,以提高可扩展性。
此外,它以Sink[ByteString,_]
的形式出现,因此在您的情况下不需要进一步的数据调整/转换。