流处理

时间:2014-06-30 18:18:08

标签: scala playframework akka scalaz scalaz-stream

要求当用户上传file时,它应该以下列方式工作

1)向用户显示文件上传对话框(在浏览器中)。用户选择一个文件。 2)应用程序应仅加载前x个记录(例如,假设总记录数为100,然后得到前10个),用户将有机会对记录进行目视检查(只读视图)。 3)用户然后决定两件事之一:"点击提交"它会将所有数据和流传输到服务器,或者如果他/她点击"下一步"他/她可以查看接下来的10条记录等。

Scalaz-stream是否适合作为一个完整的解决方案,特别是从上面做2)和3)?要仅获取部分数据并暂停流,然后继续,使用和重复该过程?

1 个答案:

答案 0 :(得分:1)

不,scalaz-stream不是个好主意。表演!框架的own framework包含EnumeratorEnumerateeIteratee类,可用于流的异步处理,文件上传代码已经构建为使用它

您有两种选择:

一,使用HTML5和前端Javascript来访问该文件。这只适用于最新的浏览器。如果您在用户选择"提交"之前不想上传任何文件,这是唯一的选择。

二,使用Enumerator框架逐步解析上传到服务器,并通过长轮询AJAX / Comet / Websocket响应前端Javascript,并在解析时使用一部分记录。解析传入上传的Iteratee必须暂停并等待来自前端的进一步输入。这个解决方案很复杂,并且会遇到浏览器超时问题。

这些都不是一个好主意。将整个文件一次上传,将解析后的记录反馈到前端,然后进行"提交"将更简单。按钮实际上起到" Save"按钮告诉服务器保持收到的上传。除非您通过移动连接推送100 MiB + Excel文件,否则这可能是最简单,最兼容的解决方案。