给定默认的Yesod支架,通过将上传的文件移动到static
目录中来实现文件上传,如何链接到静态目录中的文件?对于普通的静态文件,staticFiles
拼接将生成一个我可以引用的标识符,但是对于用户上传的文件,显然我无法对这些标识符进行硬编码。我可以通过手动使用#{}
接头来做到这一点,但我希望可能还有一些类型安全的东西,即使唯一可检查的组件是我正确使用了static/
前缀。
最佳答案
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
将使用该参数插入哈希值以达到清除缓存的目的。关于haskell - 链接到Yesod中没有Haskell标识符的静态文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13106036/