-- Accepts file uploads and saves the files in the given directory. -- WARNING: this script is a SECURITY RISK and only for -- demo purposes. Do not put it on a public web server. import Control.Monad (liftM) import Data.Maybe (fromJust) import qualified Data.ByteString.Lazy as BS import Network.FastCGI dir = "upload" cgiMain = do m <- getInputFilename "file" case m of Just n -> saveFile n Nothing -> output form saveFile n = do cont <- liftM fromJust $ getInputFPS "file" let p = dir ++ "/" ++ basename n liftIO $ BS.writeFile p cont output $ "Saved as " ++ p ++ "." form = concat ["
", "
", "", "
"] basename = reverse . takeWhile (`notElem` "/\\") . reverse main = runFastCGI cgiMain