gpt4 book ai didi

haskell - 如何使用 Yesod 将文件上传到服务器

转载 作者:行者123 更新时间:2023-12-04 06:08:43 40 4
gpt4 key购买 nike

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

最佳答案

2012 年 9 月 13 日更新:

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

谷歌搜索功能fileAFormReq给了我这个example .

我只用相关部分制作了它的最小版本。

{-# 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 所做的努力稍微改变了 forms-package。如果您使用的是最新版本的 yesod,请查看 this出去。

我粘贴的代码使用了旧的非 i18n(默认为英文)版本的 yesod-forms包裹。

关于haskell - 如何使用 Yesod 将文件上传到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7460646/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com