我需要了解使用 Snap 上传文件的过程。
鉴于这种形式:
<form id="form" action="/files/upload" method="POST" enctype="multipart/form-data">
<input type="file" id="files" name="files[]" multiple />
<button type="submit" onclick="handleFiles(e)">Upload</button>
</form>
我是使用 getPostParams 等相同的函数来处理二进制文件还是使用 Snap.Util.FileUploads 中的函数?
我需要在数据库中上传和保存像 PDF 这样的二进制文件。数据库驱动程序将接受 ByteString 来存储二进制文件。
我经历了 Snap.Util.FileUploads 但它看起来不像是我需要的。所以我不确定如何在处理程序中处理这个?
谢谢。
编辑
在 IRC 的帮助下,我设法提出了以下结构。我认为它应该接近正确?好吧,它编译并将文件转储到 mongodb。我也可以读回来。虽然我不太了解枚举器和 Iteratee 的东西......
handleFiles :: AppHandler ()
handleFiles = do
[file] <- handleMultipart defaultUploadPolicy $ \part -> do
content <- liftM BS.concat EL.consume
return content
let b = ["file" =: Binary file]
r <- eitherWithDB $ insert "tests" b
either (error . show) (const $ return () ) r