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