2010-02-19 8 views
13

, 나는이 코드를 가지고 :Grails가 강제로 csv 파일을 다운로드하는 방법은 무엇입니까? 내 GSP보기에서

<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> 

내 CSV 파일을 다운로드하고 브라우저에서 내 CSV 파일을 읽을 수 없습니다 싶습니다!
강제 다운로드하는 방법? 내 컨트롤러에서

다음

코드 부분 :

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

다운로드를 강제로 내 코드에서이 부분을 추가하려면? - : 응답 출력 스트림에 직접 쓰기

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

답변

23

렌더링 호출이 문제는 다음과 같습니다

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

당신은 또한 export plugin을 사용할 수 있습니다 - 당신이 원하는 것을, 그리고 멋진 추가 코드가 협회, 등등뿐만 아니라 다른 출력 형식을 따를 것입니다.

요구 사항에 따라 더 유지 관리가 쉬운 솔루션 일 수 있습니다. 감안

(GSP) : 컨트롤러

<td><g:link action="download" id="${fileResourceInstance}" params="[rs:signalDataInstance.datasetID]" > download </g:link></td> 

:

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

}

+0

I '가 다운로드 여기 –

+0

흠, 적어도이 경우에는 수정하지 않아도됩니다. –

0

의 수정이며 m 폴더에서 파일 구문 분석, add "fileResourceInstanceList"목록에 파일 이름이 있습니다. 각 fileResourceInstanceList에 대한 내 견해로는 CSV 파일에 대한 링크를 추가합니다. 내보내기 플러그인이 도메인 클래스에서 작동하지만이 유용한 플러그인을 사용할 수 있는지 잘 모르겠습니까?
관련 문제