从 GSP 页面中的变量路径名在新窗口中打开 pdf 文件

Posted

技术标签:

【中文标题】从 GSP 页面中的变量路径名在新窗口中打开 pdf 文件【英文标题】:Open pdf file in new window from variable path name in GSP page 【发布时间】:2017-01-24 23:13:45 【问题描述】:

我有一张名为 file 的地图,我从我的控制器收到,其中包含存储在 assets/myfiles/file.pdf 中的文件的路径和描述,格式如下:

"filepath": "file.pdf",
"description": "something"

如何在我正在呈现的 GSP 页面中创建指向此 pdf 的链接?

<a href="$resource(dir: 'myfiles', file:' $file[filename])' " target="_blank">$file[description]</a>

我尝试了上述方法,但它没有打开 pdf,而只是打开了应用程序的另一个克隆标签

【问题讨论】:

Resource's 用于 grails 2 上的应用程序资源 pre assets。您需要查看 assets 如何加载图像并可能在 assets 配置中配置新文件夹。最重要的是,由于这是在资产文件夹中,我假设在应用程序中重新安装战争时会发生什么,您是否需要通过应用程序历史记录来保留文件。如果是这样,方法是有缺陷的 【参考方案1】:

创建控制器方法并编写连接以下载您的文件。

普惠制: 在您的 GSP 中编写按钮并创建指向此控制器操作的链接,如下所示。

<g:link class="btn btn-info btn-sm" 
      action="downloadMyFile" resource="$instance" 
                           target="_blank">DOWNLOAD FILE</g:link>

控制器:

        // This is Used To Open PDF File. 
        def downloadMyFile()
            def file = new File("download/path/to/your/file")
            response.setContentType("application/pdf")
            response.setHeader("Content-disposition", "filename=$file.getName()")
            response.outputStream << file.newInputStream()     
        

[或]

        // This is Simply Download Your File.  
        def downloadFile()
             def file = new File("Path/to/your/File")
             response.setContentType("application/octet-stream")
             response.setHeader("Content-disposition", "filename=$file.getName()")
             response.outputStream << file.newInputStream()  
        

注意:

资源:您可以将实例传递给您的下载操作。 target="_blank" :在新标签中打开/下载文件。 action :控制器中定义的动作名称。

【讨论】:

以上是关于从 GSP 页面中的变量路径名在新窗口中打开 pdf 文件的主要内容,如果未能解决你的问题,请参考以下文章

js跳转页面在新选项卡中打开

超链接的目标网页在新窗口中打开的方式是

在新窗口中打开页面而不阻止弹出窗口

如何使iframe中的链接都在新窗口打开?

当用户选择“在新选项卡中打开”/“在新窗口中打开”而不是使用 html/javascript 点击时如何到达所需的页面

如何使用asp.net MVC中的href从javascript在新窗口中打开打开的窗口