7

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

4

1 回答 1

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会使用它来插入哈希值以实现缓存清除目的。

于 2012-10-28T04:41:42.030 回答