通过Iteratee与Play2/Scala将文件上传流转发到S3
我读了一些关于通过Iteratee将文件发送到S3的可能性,似乎允许在收到文件时发送S3块文件,并避免使用OutOfMemory来存储大文件。
我发现这个SO帖子可能几乎是我需要做的: 有人可以用简单的方式解释这个问题,对于已经阅读过有关Iteratees的博客的人来说,还不是Scala / Play2专家呢? 我甚至不知道我是否应该使用多部分身体解析器或类似的东西,但我知道的一件事是我不明白这段代码正在做什么: val consumeAMB = Traversable.takeUpTo[Array[Byte]](1028*1028) &>> Iteratee.consume() val rechunkAdapter:Enumeratee[Array[Byte],Array[Byte]] = Enumeratee.grouped(consumeAMB) val writeToStore: Iteratee[Array[Byte],_] = Iteratee.foldM[Array[Byte],_](connectionHandle){ (c,bytes) => // write bytes and return next handle,probable in a Future } BodyParser( rh => (rechunkAdapter &>> writeToStore).map(Right(_))) 顺便说一句,与使用经典的Java InputStream / OutputStream相比,内存消耗的差异将是什么。 那么使用Iteratee有什么优势? 我可以看到的一个区别是,我得到并转发给S3的InputStream在我的情况下是由一个临时文件(这是一个CXF行为)支持的,所以它可能不像Play Iteratee那样被反应 但是使用Iteratees,如果枚举器产生由连接接收的字节并通过Iteratee将其转发到S3,那么如果到S3的连接不好,并且字节不能非常快地转发,那么存储“挂起”字节? 解决方法
简单的解释?我会尽力。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |