Grails项目中静态资产文件template.csv下载链接异常求助
解决Grails中下载assets文件夹静态文件的问题
你遇到的情况是因为相对路径没有正确指向asset pipeline管理的静态资源,反而被Grails的路由系统解析成了页面路由,所以下载到的是page.gsp的HTML内容。下面是两种可靠的解决方法:
方法一:使用Grails Asset标签生成正确URL
Grails的asset pipeline提供了专门的标签/方法来引用assets文件夹里的资源,能自动处理路径和缓存优化(比如给文件名加哈希值)。在page.gsp里可以这样写:
<a href="${assetPath(src: 'template.csv')}" download="template.csv">Download the template</a>
或者用<g:link>标签更符合Grails的写法:
<g:link resource="template.csv" download="template.csv">Download the template</g:link>
这两种方式都会生成正确的资源URL,确保浏览器请求到的是/grails-app/assets根目录下的template.csv文件,而不是被路由到页面控制器。
方法二:使用绝对路径(不推荐但可用)
如果不想用asset标签,也可以直接使用绝对路径,但要注意路径的正确性:
<a href="/assets/template.csv" download="template.csv">Download the template</a>
不过这种方式的缺点是,当你开启asset pipeline的缓存优化(比如资源文件名加哈希)时,这个路径就会失效,所以更推荐第一种方法。
为什么原来的方法失败?
你写的相对路径assets/template.csv会被浏览器解析为当前页面路径的子路径,比如如果当前页面的URL是/your-page,浏览器会请求/your-page/assets/template.csv,这个路径被Grails的路由系统匹配到了对应的页面控制器,返回的就是page.gsp的HTML内容,而不是你要的CSV文件。
内容的提问来源于stack exchange,提问作者Aserre
相关产品推荐
相关产品推荐

