[英]Unable to save file to s3 using scala akka-http
尝试将文件保存到s3。 文件作为Source[ByteString, Any]
因此必须将其转换为PutObjectRequest
的InputStream
。 然后计算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.
一种非阻塞,更具反应性的替代方案是使用Alpakka S3水槽。
它可以为您解决所有编码和S3协议问题,并且将完全启用反压功能以增强可扩展性。
此外,它采用Sink[ByteString,_]
的形式,因此在您的情况下不需要进一步的数据适配/转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.