-import Data.List
+{-# LANGUAGE
+ OverloadedStrings
+ , UnicodeSyntax
+ #-}
+import qualified Data.ByteString.Lazy.Char8 as Lazy
+import Control.Applicative
+import Control.Monad.Unicode
import Data.Maybe
-import Network
+import Data.Monoid.Unicode
import Network.HTTP.Lucu
-main :: IO ()
-main = let config = defaultConfig { cnfServerPort = PortNumber 9999 }
+main ∷ IO ()
+main = let config = defaultConfig { cnfServerPort = "9999" }
resources = mkResTree [ ([], resMain) ]
in
do putStrLn "Access http://localhost:9999/ with your browser."
- runHttpd config resources
+ runHttpd config resources []
-resMain :: ResourceDef
+resMain ∷ ResourceDef
resMain
- = ResourceDef {
- resUsesNativeThread = False
- , resIsGreedy = False
- , resGet
- = Just $ do setContentType $ read "text/html"
- output ("<title>Multipart Form Test</title>" ++
- "<form action=\"/\" method=\"post\" enctype=\"multipart/form-data\">" ++
- " Enter some value:" ++
- " <input type=\"text\" name=\"val\">" ++
- " <input type=\"submit\" value=\"Submit\">" ++
- "</form>")
- , resHead = Nothing
+ = emptyResource {
+ resGet
+ = Just $ do setContentType $ parseMIMEType "text/html"
+ putChunks $ "<title>Multipart Form Test</title>\n"
+ ⊕ "<form action=\"/\" method=\"post\" enctype=\"multipart/form-data\">\n"
+ ⊕ " Upload some file:\n"
+ ⊕ " <input type=\"text\" name=\"text\">\n"
+ ⊕ " <input type=\"file\" name=\"file\">\n"
+ ⊕ " <input type=\"submit\" value=\"Submit\">\n"
+ ⊕ "</form>\n"
, resPost
- = Just $ do form <- inputForm defaultLimit
- let value = fromMaybe "" $ fmap snd $ find ((== "val") . fst) form
- setContentType $ read "text/plain"
- output ("You entered: " ++ value)
- , resPut = Nothing
- , resDelete = Nothing
- }
\ No newline at end of file
+ = Just $ do form ← getForm Nothing
+ let text = fromMaybe (∅) $ fdContent <$> lookup "text" form
+ file = fromMaybe (∅) $ fdContent <$> lookup "file" form
+ fileName = fdFileName =≪ lookup "file" form
+ setContentType $ parseMIMEType "text/plain"
+ putChunks $ "You entered \"" ⊕ text ⊕ "\".\n"
+ putChunks $ "You uploaded a " ⊕ Lazy.pack (show $ Lazy.length file) ⊕ " bytes long file.\n"
+ putChunks $ "The file name is " ⊕ Lazy.pack (show fileName) ⊕ ".\n"
+ }