如何强制grails下载csv文件?

如何强制grails下载csv文件?,grails,groovy,grails-controller,Grails,Groovy,Grails Controller,在我的普惠制观点中,我有以下代码: <g:each in="${fileResourceInstanceList}" status="i" var="fileResourceInstance"> <tr class="${(i % 2) == 0 ? 'odd' : 'even'}"> <td>${fileResourceInstance.decodeURL()}</td> <td><a href="${createLinkT

在我的普惠制观点中,我有以下代码:

<g:each in="${fileResourceInstanceList}" status="i" var="fileResourceInstance">

<tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
<td>${fileResourceInstance.decodeURL()}</td>

<td><a href="${createLinkTo( dir:"/upload_data/datasets/ds"+signalDataInstance.datasetID , file: fileResourceInstance.decodeURL(), absolute:true )}" target="_new">view</a></td>

<td><g:link action="deleteFile" id="${fileResourceInstance.replace('.','###')}" params="[rs:signalDataInstance.datasetID]" onclick="return confirm('Are you sure?');"> delete </g:link></td>
</tr>
</g:each>
在我的代码中的何处添加此部分以强制下载?:

response.setHeader("Content-disposition", "attachment; filename=" + file.name + ".csv");
render(contentType: "text/csv", text: file.name.toString());

调用render是个问题-直接写入响应输出流:

response.setHeader "Content-disposition", "attachment; filename=${file.name}.csv"
response.contentType = 'text/csv'
response.outputStream << file.text
response.outputStream.flush()
response.setHeader“内容处置”,“附件;文件名=${file.name}.csv”
response.contentType='text/csv'
response.outputStream您还可以使用-它做您想要的事情,并且有一些很好的附加代码,可以遵循关联等,以及其他输出格式

可能是一个更易于维护的解决方案,具体取决于您的需求

以下是修复方法:

鉴于(普惠制):

下载
在控制器中:

    def f = new File( "${linkDir}".toString() )
    if( f.exists() ){
        f.eachFile(){ file->
        if( !file.isDirectory() )
            fileResourceInstanceList.add( file.name )
        }
    }
def下载={

def filename = params.id

def dsId = params.rs

def webRootDir = servletContext.getRealPath("/")

def linkDir = "${webRootDir}/upload_data/datasets/ds${dsId}"

    def file = new File( "${linkDir}".toString() + File.separatorChar + filename + ".csv" ) 

response.setHeader "Content-disposition", "attachment; filename=${file.name}"
      response.contentType = 'text/csv'
      response.outputStream << file.text
      response.outputStream.flush()
def filename=params.id
def dsId=params.rs
def webRootDir=servletContext.getRealPath(“/”)
def linkDir=“${webRootDir}/upload_data/dataset/ds${dsId}”
def file=新文件(“${linkDir}”.toString()+file.separatorChar+filename+”.csv”)
response.setHeader“内容处置”,“附件;文件名=${file.name}”
response.contentType='text/csv'

response.outputStream我正在解析文件夹中的文件,在列表“fileResourceInstanceList”中添加文件名。在我的视图中,我为每个fileResourceInstanceList添加了一个指向csv文件的链接。导出插件与域类一起工作,我不确定我是否可以使用这个有用的插件?嗯,在这种情况下可能不会,至少不需要修改。
def filename = params.id

def dsId = params.rs

def webRootDir = servletContext.getRealPath("/")

def linkDir = "${webRootDir}/upload_data/datasets/ds${dsId}"

    def file = new File( "${linkDir}".toString() + File.separatorChar + filename + ".csv" ) 

response.setHeader "Content-disposition", "attachment; filename=${file.name}"
      response.contentType = 'text/csv'
      response.outputStream << file.text
      response.outputStream.flush()