在Grails Controller中打开或下载URL链接

时间:2015-07-10 12:50:46

标签: grails groovy

我想在Grails控制器方法中呈现或下载链接到PDF的URL。我没关系打开它是在新的或相同的选项卡,或只是下载它。这是如何在grails中完成的?

到目前为止,我有:

render(url: "http://test.com/my.pdf")

但是,我在尝试这种方式和其他方式时遇到了错误,例如使用内容呈现回复。有线索吗?

2 个答案:

答案 0 :(得分:1)

是的,你绝对可以轻松地做到:

首先从URL获取文件(如果您没有本地文件),例如:

class FooService {

    File getFileFromURL(String url, String filename) {
        String tempPath = "./temp"     // make sure this directory exists

        File file = new File(tempPath + "/" + filename)
        FileOutputStream fos = new FileOutputStream(file)
        fos.write(new URL(url).getBytes())
        fos.close()
        file.deleteOnExit()

        return file
    }
}

现在在您的控制器中,执行此操作以允许用户自动下载您的PDF文件:

class FooController {

    def fooService

    def download() {
        String filename = "my.pdf"
        // You can skip this if you already have that file in the same server
        File file = fooService.getFileFromURL("http://test.com/my.pdf", filename)

        response.setContentType("application/octet-stream")
        response.setHeader("Content-disposition", "${params.contentDisposition}; filename=${filename}")
        response.outputStream << file.readBytes()
        return
    }
}

现在,当用户点击/foo/download时,文件将自动下载。

答案 1 :(得分:1)

一个选项是

class ExampleController {
    def download() {
        redirect(url: "http://www.pdf995.com/samples/pdf.pdf")
    }
}

转到localhost:8080/appName/example/download将根据用户的浏览器偏好设置下载文件或在同一标签中打开文件进行阅读。

我使用grails 2.5.0