在Snap Framework中显示文件上载处理程序(handleMultiPart)中的进度状态

时间:2014-12-19 17:34:50

标签: haskell haskell-snap-framework

我正在使用Snap框架来构建Web应用程序的原型。我正在尝试使用Snap.Util.FileUploads.handleMultiPart上传文件,使用iteratee立即处理它,同时在同一页面上显示进度消息。

可以挂钩Data.Enumerator.printChunks来调试控制台上的进度。在处理文件上传时,我无法弄清楚如何在同一页面上显示进度。如何在文件上传期间使用handleMultiPart显示进度消息?

同样handleMultiPart需要PartInfo -> Iteratee ByteString IO a来处理文件上传。 handleMultiPart应该MonadIO m => PartInfo -> Iteratee ByteString m a更简单吗?

1 个答案:

答案 0 :(得分:0)

一般情况下,我不知道是否可以通过在上传文件时推送HTML响应来在客户端显示进度。据我所知,执行此操作的Web应用程序通常使用一些JavaScript API或Flash小部件来执行此操作。当然,使用handleMultiPart是不可能的。

流式传输到控制台是另一回事,但是 - 您可以轻松提供记录块信息的枚举(或更新MVar,替代方案),然后将控制传递到下游。这将在snap 1.0(接近发布)中减少大脑弯曲,这将使用更易于思考的io-stream。

最后,handleMultiPart在IO上工作,因为否则将需要monad的“run”动作,即从(m a - > IO a)反向提升。有办法做这种事情,但快照< 1.0没有做到这一点,对不起---而在快照1.0中,问题将没有实际意义。