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