groovyとjavaの2つの方法でファイルをダウンロードします


groovy方式
def downloadTemplate = {
        def appPath = servletContext.getRealPath("/").toString()
        def file = new File(appPath + "template/" + params.fileName)
        response.setHeader("Content-disposition", "attachment; filename=merTemplate.xls")
        response.contentType = "application/x-rarx-rar-compressed"
        response.setCharacterEncoding("utf-8")
        response.outputStream << file.newInputStream()
    }

JAva方式
def downloadTemplate = {
        try {
            def appPath = servletContext.getRealPath("/").toString()
            def file = new File(appPath + "template/" + params.fileName)

            if(file.length()>0){
                response.setHeader("Content-disposition", "attachment; filename=merTemplate.xls")
                response.contentType = "application/x-rarx-rar-compressed"
                response.setCharacterEncoding("utf-8")
                def out = response.getOutputStream()
                InputStream is = new FileInputStream(file)
                byte[] buffer = new byte[1024]
                int i = -1
                while ((i = is.read(buffer)) != -1){
                    out.write(buffer, 0, i)
                }
                out.flush()
                out.close()
                is.close()
            }
        }catch(Exception ex) {
            ex.printStackTrace()
        }
    }

これはGrailsプロジェクトのコードです.
groovy方式は、その定義を使用する<
JAva方式は私たちがよく知っていて、ファイルストリームの閉鎖があって、比較的に筋道がはっきりしているような気がします.
やはりjavaという方法で実現することをお勧めします.