X-Git-Url: http://git.cielonegro.org/gitweb.cgi?p=Lucu.git;a=blobdiff_plain;f=examples%2FMultipart.hs;h=906eff59ca3a78a6f425a3df28a1171e4527e31a;hp=3897dfb2a1f62359c44206c113ba60cf0314b5e4;hb=950640dd241222203778f8167943d30fa52f356a;hpb=0214f070b80791323430e21b53bcbe8a77b71b23 diff --git a/examples/Multipart.hs b/examples/Multipart.hs index 3897dfb..906eff5 100644 --- a/examples/Multipart.hs +++ b/examples/Multipart.hs @@ -1,40 +1,45 @@ -import qualified Data.ByteString.Lazy.Char8 as L8 -import Data.List +{-# LANGUAGE + OverloadedStrings + , UnicodeSyntax + #-} +import qualified Data.ByteString.Lazy.Char8 as Lazy +import Control.Applicative +import qualified Data.Collections as C +import Control.Monad.Unicode import Data.Maybe +import Data.Monoid.Unicode +import Network import Network.HTTP.Lucu +import Prelude.Unicode -main :: IO () -main = let config = defaultConfig { cnfServerPort = "9999" } - resources = mkResTree [ ([], resMain) ] +main ∷ IO () +main = let config = defaultConfig { cnfServerPort = "9999" } + tree ∷ ResourceTree + tree = C.fromList [ ([], nonGreedy resMain) ] in do putStrLn "Access http://localhost:9999/ with your browser." - runHttpd config resources [] + withSocketsDo ∘ runHttpd config $ resourceMap tree - -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 - } \ No newline at end of file +resMain ∷ Resource +resMain = C.fromList + [ ( GET + , do setContentType $ parseMIMEType "text/html" + putChunks $ "Multipart Form Test\n" + ⊕ "
\n" + ⊕ " Upload some file:\n" + ⊕ " \n" + ⊕ " \n" + ⊕ " \n" + ⊕ "
\n" + ) + , ( POST + , 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" + ) + ]