Search code examples
htmlgrailsgsp

Open pdf file in new window from variable path name in GSP page


I have a map named file I'm receiving from my controller which contains the path and description of a file stored in assets/myfiles/file.pdf the following format:

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

How do I create a link to this pdf in a GSP page I'm rendering?

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

I tried the above but it doesn't open the pdf but just another cloned tab of the app


Solution

  • Create Controller Method And Write A Connection To Download Your File.

    GSP:
    Write the Button And Create A link To this Controller Action In Your GSP like below.

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

    Controller:

            // 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()     
            }
    

    [OR]

            // 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()  
            }
    

    Note:

    resource : You can pass Instance to your download action.
    target="_blank" : Open/Download File In New Tab.
    action : Action name that is defined in Controller.