Справка по веб-программированию haskell cgi - PullRequest
1 голос
/ 18 ноября 2010

У меня есть форма:

<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 ничего не возвращает, но я не знаю, почему.

Что-то не так с формой или программой?

1 Ответ

1 голос
/ 18 ноября 2010

Проблема в том, что исходный код 1 использует POST ;но в HTML-форме вопроса вместо этого используется HTML GET .Исправление заключается в изменении GET на POST в HTML.

Из исходного примера , где он использует HTTP POST :

fileForm =
    form ! [method "post"
           , enctype "multipart/form-data"]
             << [afile "file", submit "" "Upload"]

Новая форма (частично ниже), где она неправильно использует GET.

<form action="upload.cgi" 
      method="get" enctype="multipart/form-data">

Примечания
1 См. Раздел 9: Интернет / Литература /Практическое веб-программирование на Хаскеле

...