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