2010-02-19 15 views
13

, Bu kodu vardır:Csv dosyalarını indirmek için grails nasıl zorlanır? Benim gsp görünümünde

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

benim csv dosyalarını indirmek ve benim tarayıcıda benim CSV dosyalarını okuyamaz etmek istiyorum!
İndirme nasıl zorlanır? benim denetleyicisi

İşte

kod kısmı:

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

indir zorlamak için benim kodunda bu kısmını eklenir? -: cevabı çıktı akışına doğrudan yazar

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

cevap

23

işlemek için çağrı sorunudur:

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

Ayrıca export plugin kullanabilirsiniz - bu istediğini yapar ve bazı güzel ek kodu vardır diğer çıktı biçimlerinin yanı sıra dernekler vb.

Gereksinimlerinize bağlı olarak daha sürdürülebilir bir çözüm olabilir. görünümünde

(GSP): denetleyicisi

<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' indirmek Burada –

+0

hmm, muhtemelen bu durumda değil, en azından modifikasyonlar olmadan. –

0

düzeltmedir Dosyaları bir klasörden ayrıştırma "fileResourceInstanceList" listesinde dosya adları. Her bir dosya için görüşümdeResourceInstanceList csv dosyalarına bir link ekliyorum. Dışa aktarma eklentisi, alan sınıfı ile çalışır, bu kullanışlı eklentiyi kullanabileceğime emin değilim?