import qualified Data.ByteString.Lazy.Char8 as L8 import Data.List import Data.Maybe import Network.HTTP.Lucu main :: IO () main = let config = defaultConfig { cnfServerPort = "9999" } resources = mkResTree [ ([], resMain) ] in do putStrLn "Access http://localhost:9999/ with your browser." runHttpd config resources [] resMain :: ResourceDef resMain = ResourceDef { resUsesNativeThread = False , resIsGreedy = False , resGet = Just $ do setContentType $ read "text/html" output ("Multipart Form Test" ++ "
" ++ " Upload some file:" ++ " " ++ " " ++ " " ++ "
") , resHead = Nothing , resPost = Just $ do form <- inputForm defaultLimit let text = fromMaybe L8.empty $ fmap fdContent $ find ((== "text") . fdName) form file = fromMaybe L8.empty $ fmap fdContent $ find ((== "file") . fdName) form fileName = fdFileName =<< find ((== "file") . fdName) form setContentType $ read "text/plain" outputChunk ("You entered \"" ++ L8.unpack text ++ "\".\n") outputChunk ("You uploaded a " ++ show (L8.length file) ++ " bytes long file.\n") output ("The file name is " ++ show fileName ++ ".\n") , resPut = Nothing , resDelete = Nothing }