handleFormUploads :: MonadSnap m=> UploadPolicygeneral upload policy
-> FileUploadPolicyUpload policy for files
-> (PartInfo -> InputStream ByteString -> IO a)A file storage function
-> m ([FormParam], [FormFile a])
Processes form data and calls provided storage function on file parts.
You can use this together with withTemporaryStore, storeAsLazyByteString or provide your own callback to store uploaded files.
If you need to process uploaded file mime type or file name, do it in the store callback function.
See also foldMultipart.
Example using with small files which can safely be stored in memory.
import qualified Data.ByteString.Lazy as Lazy
handleSmallFiles :: MonadSnap m => [(ByteString, ByteString, Lazy.ByteString)]
handleSmallFiles = handleFormUploads uploadPolicy filePolicy store
where
uploadPolicy = defaultUploadPolicy
filePolicy = setMaximumFileSize (64*1024)
$ setMaximumNumberOfFiles 5
defaultUploadPolicy
store partInfo stream = do
content <- storeAsLazyByteString partInfo stream
let
fileName = partFileName partInfo
fileMime = partContentType partInfo
in (fileName, fileMime, content)