2011-09-18 10 views
8

사용자가 파일을 내 서버에 업로드 할 수있는 양식을 작성하려고합니다. Yesodod는 이러한 기능을 위해 fileAFormReq를 사용했지만 컴파일 오류가 발생하여 작동하지 않게되었습니다. 최신은 "(RenderMessage MySite t)에 대한 인스턴스가 없습니다" 사용 방법에 대한 예제가 모두 삭제되었습니다. 그것은 매우 감사하겠습니다. 감사합니다, 열린Yesod를 사용하여 서버에 파일을 업로드하는 방법

+0

안녕하십니까. 예를 들어, 전체 파일 업로드 (업로드 된 파일 제공, Yesod에서 파일 참조 및 삭제)에 대한 간단한 블로그 게시물을 작성했습니다. https://ersocon.net/blog/2017/ 2/18/file-uploads-yesod – Alebon

답변

13

업데이트 (13) 9 월 - 2012 년 :이

관계자는 저에게이 example을 준 기능 fileAFormReq에 인터넷 검색을 here


업로드 파일에 대한 도움말 페이지를 유지했다.

나는 관련된 부분 만있는 최소 버전을 만들었습니다.

{-# LANGUAGE OverloadedStrings #-} 
{-# LANGUAGE QuasiQuotes, TypeFamilies, TemplateHaskell, MultiParamTypeClasses #-} 
import Yesod.Core 
import Yesod.Form 
import Yesod.Form.MassInput 
import Control.Applicative 
import Data.Text (Text, pack) 
import Network.Wai.Handler.Warp (run) 
import Data.Time (utctDay, getCurrentTime) 
import qualified Data.Text as T 
import Control.Monad.IO.Class (liftIO) 

mkYesod "HelloForms" [parseRoutes| 
/file FileR GET POST 
|] 

data HelloForms = HelloForms 

instance RenderMessage HelloForms FormMessage where 
    renderMessage _ _ = defaultFormMessage 

instance Yesod HelloForms where 
    approot _ = "" 


main = toWaiApp HelloForms >>= run 3000 

fileForm = renderTable $ pure (,) 
    <*> fileAFormReq "Required file" 
    <*> fileAFormOpt "Optional file" 

getFileR = do 
    ((res, form), enctype) <- runFormPost fileForm 
    defaultLayout [whamlet| 
<p>Result: #{show res} 
<form method=post enctype=#{enctype}> 
    <table> 
     ^{form} 
    <tr> 
     <td> 
      <input type=submit> 
|] 

postFileR = getFileR 

runhaskell이 다음 브라우저에서 http://localhost:3000/file를 방문하십시오.

희망이 도움이됩니다. :)


편집 :

아 기다리고, 당신이 무엇을 놓치고 있는지 명백하다. 컴파일 오류가 방금 말했듯이, 재단을위한 RenderMessage 인스턴스가 누락되었습니다.

i18n에 대한 최근의 노력이 양식 패키지를 약간 변경 한 것을 알고 있습니다. 최신 버전의 yesod를 사용하는 경우 this을 확인하십시오.

붙여 넣은 코드는 yesod-forms 패키지의 이전 비 -i18n (기본 영어 버전) 버전을 사용합니다.

+2

감사합니다. 누락 된 인스턴스 오류는 실제로 fileAFormReq을 제대로 사용하지 않는 부작용이었습니다 (ghc에서 결과로 다른 RenderMessage 인스턴스가있을뿐 아니라 사용자가 지적한 결과가 아님). , 그것은 매우 혼란 스러웠다). 어쨌든 이제 완벽하게 작동합니다. 감사합니다! –

관련 문제