我想在网站上放置下载链接,以便用户可以下载文件template.csv
。该文件是静态的,位于我的/grails-app/assets
文件夹的根部。
在我的page.gsp
内,我尝试了2种方法,无济于事:
-
<a href="assets/template.csv" download="template.csv">Download the template</a>
- 这将导致下载
template.csv
文件,但内容是page.gsp
的HTML代码,而不是我在资产中上传的文件的原始内容。
- 这将导致下载
-
<a href="${assetPath(src: "template.csv", absolute: true)}" download="template.csv">Download the template</a>
- 生成的HTML文件具有指向
localhost:8080/mysite/assets/template.csv
的链接,但单击它提示了错误消息:Failed - no file
。
- 生成的HTML文件具有指向
做我想实现的正确方法是什么?我需要添加额外的权限以允许下载文件吗?
是否存在问题?我们的WebApp依赖一个相当古老的技术堆栈:
- Grails 2.3.4
- 插件资产pipeline-2.2.5
我对用-tag直接下载文件有一些麻烦。
要克服这一点,我使用控制器方法返回文件,并将可下载的文件放在Web-App/:
下的自己的文件夹中class MyController {
@Autowired()
AssetResourceLocator assetResourceLocator
def downloadExcelTemplate () {
String fileName = "MyExcelFile.xlsx"
/* Note: these files are found in /web-app/downloadable directory */
Resource resource = assetResourceLocator.findResourceForURI("/downloadable/$fileName")
response.setHeader "Content-disposition", "attachment; filename=${resource.filename}"
response.contentType = 'application/vnd.ms-excel'
response.outputStream << resource.inputStream.bytes
}
}
,只需使用常规A-TAG链接到此控制器方法。这样,您还可以获得对文件下载的更多控制。