无法使用scala akka http将文件保存到s3

无法使用scala akka http将文件保存到s3,scala,amazon-web-services,amazon-s3,akka,akka-http,Scala,Amazon Web Services,Amazon S3,Akka,Akka Http,正在尝试将文件保存到s3。文件作为源[ByteString,Any]传入,因此必须将其转换为PutObjectRequest的InputStream。然后计算ObjectMetadata内容长度和md5。这是我的代码,后面是错误消息。如有任何意见,将不胜感激。谢谢 def uploadFile(source: Source[ByteString, _]) = { val stream: InputStream = source.runWith(StreamConverters.asInpu

正在尝试将文件保存到s3。文件作为
源[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,消息是您指定的Content-MD5无效。

一个非阻塞的、更多的替代方法是使用sink

它将为您解决所有编码和S3协议问题,此外,它将完全支持背压,以增强可伸缩性

此外,它以
Sink[ByteString,quot]
的形式出现,因此在您的情况下,它不需要进一步的数据适配/转换。

一种非阻塞的、更多的替代方法是使用Sink

它将为您解决所有编码和S3协议问题,此外,它将完全支持背压,以增强可伸缩性


此外,它的形式是
Sink[ByteString,
,因此在您的情况下不需要进一步的数据调整/转换。

谢谢您的建议。现在就试试,谢谢你的建议。现在就试试这个