У меня есть форма:
<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, я ничего не получаю и программа завершается ошибкой), содержимое которого является именем загруженного файла.
Итак, я пытаюсь загрузить файл с именем что-то .zipи я получаю файл с именем gs, содержимое которого - что-то .zip (записано как текст).
Я думаю, что проблема в том, что "file" getInputFilename или getInputFPS ничего не возвращает, но я не знаю, почему.
Что-то не так с формой или программой?