为静态资产文件创建下载链接



我想在网站上放置下载链接,以便用户可以下载文件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

做我想实现的正确方法是什么?我需要添加额外的权限以允许下载文件吗?

是否存在问题?

我们的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链接到此控制器方法。这样,您还可以获得对文件下载的更多控制。

最新更新