Haskell 如何使用YesSOD将文件上载到服务器

Haskell 如何使用YesSOD将文件上载到服务器,haskell,file-upload,yesod,Haskell,File Upload,Yesod,我正在尝试编写一个表单,允许用户将文件上载到我的服务器。 我看到YesSOD使用fileAFormReq实现这样的功能,但无法使其正常工作,遇到编译错误,最新的错误是: “没有(RenderMessage MySite t)的实例” 任何关于如何使用它的精简示例都将受到高度赞赏。 谢谢 Uri2012年9月13日更新: 有一个官方维护的文件上传帮助页面 谷歌搜索函数fileAFormReq给了我这个 我做了一个只有相关部分的最小版本 {-# LANGUAGE OverloadedStrings

我正在尝试编写一个表单,允许用户将文件上载到我的服务器。 我看到YesSOD使用fileAFormReq实现这样的功能,但无法使其正常工作,遇到编译错误,最新的错误是: “没有(RenderMessage MySite t)的实例” 任何关于如何使用它的精简示例都将受到高度赞赏。 谢谢
Uri

2012年9月13日更新:

有一个官方维护的文件上传帮助页面


谷歌搜索函数
fileAFormReq
给了我这个

我做了一个只有相关部分的最小版本

{-# 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
{-#语言重载字符串}
{-#语言类,类型族,模板Haskell,多段类型类#-}
核心
导入YesSOD.Form
导入Yesod.Form.masinput
导入控制
导入数据.Text(文本,包)
导入Network.Wai.Handler.Warp(运行)
导入数据.Time(utctDay,getCurrentTime)
导入符合条件的数据。文本为T
导入控制.Monad.IO.Class(liftIO)
mkYesod“HelloForms”[parseRoutes]|
/文件管理器获取POST
|]
数据HelloForms=HelloForms
实例RenderMessage HelloForms FormMessage,其中
renderMessage=defaultFormMessage
实例YesOfForms在哪里
批准
main=towaapp HelloForms>>=运行3000
fileForm=renderable$pure(,)
fileAFormReq“必需文件”
FileA格式“可选文件”
getFileR=do

((res,form),enctype)谢谢。缺少实例错误实际上是我没有正确使用fileAFormReq的副作用(导致ghc希望它有另一个RenderMessage实例,而不仅仅是您指出的那个,这非常令人困惑)。不管怎样,它现在工作得很好,所以谢谢!嗨,Uri,以防万一,我写了一篇关于如何编写完整文件上传的博文(为上传的文件提供服务,在YesSOD中引用并删除它们)