我有一个要求,当用户上传file时,它应该以以下方式工作
1)向用户显示文件上传对话框(在浏览器中)。用户选择一个文件。2)应用程序应该只加载前x个记录(例如,假设记录总数为100,然后获取前10个),用户将有机会对记录进行可视审查(只读视图)。3)然后用户决定两件事中的一件:“点击提交”,这将把所有的数据和流接收到服务器,或者如果他/他点击“下一步”,他/他可以查看下10条记录等。
Scalaz-stream是一个很好的整体解决方案,尤其适合上面的2)和3)吗?是否只获取部分数据并暂停流,然后继续、消耗并重复该过程?
发布于 2014-07-01 13:57:30
不,scalaz-stream不是一个好主意。这出戏!框架有其包含Enumerator、Enumeratee和Iteratee类的own framework,这些类可用于流的异步处理,并且文件上传代码已经构建好可以使用它。
您有两个选择:
首先,使用HTML5和前端Javascript来访问文件。这只适用于最新的浏览器。如果你不想在用户选择“提交”之前上传任何文件,这是唯一的选择。
第二,使用Enumerator框架在上传到服务器时对其进行增量解析,并在解析时使用记录的子集通过长轮询AJAX/Comet/Websocket响应前端Javascript。解析传入上载的Iteratee将不得不暂停并等待来自前端的进一步输入。此解决方案将很复杂,并且会受到浏览器超时问题的影响。
这两个都不是一个很好的主意。让整个文件一次性上传,然后将解析后的记录反馈到前端,并让"Submit“按钮实际上起到"Save”按钮的作用,以告诉服务器保留接收到的上传内容,这会简单得多。除非您要将100个MiB+ Excel文件推送到移动连接上,否则这可能是最简单和最兼容的解决方案。
https://stackoverflow.com/questions/24496429
复制相似问题