链接到Yesod中没有Haskell标识符的静态文件

时间:2012-10-28 03:00:19

标签: haskell yesod

给定一个默认的Yesod脚手架,通过将上传的文件移动到static目录来实现文件上传,如何链接到静态目录中的文件?对于普通静态文件,staticFiles拼接将生成我可以引用的标识符,但对于用户上传的文件显然我不能对这些标识符进行硬编码。我可以通过手动使用#{}拼接来做到这一点,但我希望可能有更多类型安全的东西,即使唯一可检查的组件是我正确使用static/前缀。

1 个答案:

答案 0 :(得分:8)

staticFiles生成一组类型为Route Static的标识符。不幸的是,Haddock不会显示关联类型系列的信息,因此您无法在文档中看到构造函数,但唯一可用的构造函数是StaticRoute

https://github.com/yesodweb/yesod/blob/master/yesod-static/Yesod/Static.hs#L142

这两个字段是路径信息和查询字符串参数。因此,要创建指向/static/foo/bar?baz=bin的链接,您可以使用:

StaticRoute ["foo", "bar"] [("baz", "bin")]

通常不需要创建查询字符串参数,但staticFiles将使用它来插入哈希值以用于缓存目的。