1
我有一个表格:哈斯克尔CGI Web编程帮助
<div id="form">
<form action="upload.cgi" method="get" enctype="multipart/form-data">
<input type="file" name="file" id="file"/>
<input type="submit" value="Upload"/>
</form>
</div>
和upload.cgi是:
saveFile n =
do cont <- liftM fromJust $ getInputFPS "file"
let f = uploadDir ++ "/" ++ basename n
liftIO $ writeFile f cont
return $ paragraph << ("Saved")
uploadDir = "./uploadDirectory"
basename = reverse . takeWhile (`notElem` "/\\") . reverse
page t b = header << thetitle << t +++ body << b
myFromJust (Just a) = a
myFromJust Nothing = "gs"
cgiMain = do
mn <- getInputFilename "file"
h <- saveFile (myFromJust mn)
output . renderHtml $ page "Saved" h
main = runCGI $ handleErrors cgiMain
的问题是,每次我试着上传文件,而不是保存该文件中,创建一个名为gs的文件(从myFromJust函数中,如果我使用fromJust,我得到Nothing并且程序失败),其内容是上传的文件名。
因此,我尝试上传一个名为something.zip的文件,我得到一个名为gs的文件,其内容是something.zip(写成文本)。
我认为问题是getInputFilename“file”或getInputFPS不会返回任何内容,但我不知道为什么。
表单或程序有问题吗?
编程哪里'getInputFilename'从何而来? – 2010-11-18 16:28:15
@Antal:* getInputFileName *很可能来自模块[Network.CGI](http://www.haskell.org/haskellwiki/Practical_web_programming_in_Haskell)。 – frayser 2010-11-18 18:08:14