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