2011-09-18 13 views
8

ユーザーがサーバーにファイルをアップロードするためのフォームを作成しようとしています。 Yesodは、このような機能に対してfileAFormReqを使用していましたが、コンパイルエラーが発生しました。最新のものは "インスタンスがない(RenderMessage MySite t)" それは高く評価されます。 おかげで、 ウリYesodを使用してサーバーにファイルをアップロードする方法

+0

こんにちはウリですが、私は完全なファイルアップロード(アップロードされたファイルを提供し、Yesodでそれらを参照し、それらを削除する)https://ersocon.net/blog/2017/を書く方法について少しブログ記事を書いています。 2/18/file-uploads-with-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の努力がフォームパッケージを少し変更したことを知っています。 yesododの最新バージョンを使用している場合は、thisをチェックしてください。

私が貼り付けたコードは、yesod-formsパッケージの古い非i18n(デ​​フォルトは英語を意味する)バージョンを使用しています。

+2

ありがとうございます。欠落しているインスタンスエラーは実際にfileAFormReqを正しく使用していない私の副作用でした(ghcの結果で、あなたが指摘したものだけでなく、別のRenderMessageインスタンス、それは非常に混乱していた)。とにかく今は完璧に動作しますので、ありがとう! –

関連する問題