如何强制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()