X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=examples%2FMultipart.hs;h=f7122f9cc58aab710337c234c813b490bc0212ad;hb=3b448555e621530c3483f03b4b5156dc606b2035;hp=e68bb396e5b292814845f7849af70995f0f35546;hpb=50e8fe7af585a8d33d93b3721be8f8f01905b891;p=Lucu.git diff --git a/examples/Multipart.hs b/examples/Multipart.hs index e68bb39..f7122f9 100644 --- a/examples/Multipart.hs +++ b/examples/Multipart.hs @@ -1,35 +1,57 @@ -import Data.List +{-# LANGUAGE + OverloadedStrings + , QuasiQuotes + , UnicodeSyntax + #-} +import qualified Data.ByteString.Lazy.Char8 as Lazy +import Control.Applicative +import qualified Data.Collections as C +import Control.Monad.Unicode +import Data.Default import Data.Maybe +import Data.Monoid.Unicode import Network import Network.HTTP.Lucu +import Prelude hiding (head) +import Prelude.Unicode +import Text.Blaze hiding (text) +import Text.Blaze.Html5 hiding (text) +import Text.Blaze.Html5.Attributes hiding (form, title) +import Text.Blaze.Renderer.Utf8 -main :: IO () -main = let config = defaultConfig { cnfServerPort = PortNumber 9999 } - resources = mkResTree [ ([], resMain) ] +main ∷ IO () +main = let config = def { 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" ++ - "
" ++ - " Enter some value:" ++ - " " ++ - " " ++ - "
") - , resHead = Nothing - , 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 +resMain ∷ Resource +resMain = C.fromList + [ ( GET + , do setContentType [mimeType| text/html; charset="UTF-8" |] + putBuilder + $ renderHtmlBuilder + $ docTypeHtml ! lang "en" + $ do head $ do meta ! charset "UTF-8" + title "Multipart Form Test" + body $ form ! action "/" + ! method "post" + ! enctype "multipart/form-data" + $ do toHtml ("Upload some file:" ∷ String) + input ! type_ "text" ! name "text" + input ! type_ "file" ! name "file" + input ! type_ "submit" ! value "Submit" + ) + , ( POST + , do f ← getForm Nothing + let text = fromMaybe (∅) $ fdContent <$> lookup "text" f + file = fromMaybe (∅) $ fdContent <$> lookup "file" f + fileName = fdFileName =≪ lookup "file" f + setContentType [mimeType| 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" + ) + ]