2014-10-28 30 views
0

這是我在grails項目上的代碼,我想創建csv文件併發送鏈接以便通過此鏈接下載?如何呈現可下載的文件wihich在localhost上:8080

當我想打開此鏈接不起作用。

我的項目是在localhost:8080/projectname/

運行我的鏈接將是這樣的:localhost:8080/projectname/Abc/grails-app/QueryStringCSVFiles/test.csv

def db = new Sql(dataSource) 
def result = db.rows("SELECT id,holderName,reportedCountry FROM Claims") 

def out = new File('../Abc/grails-app/QueryStringCSVFiles/test.csv') 
def out1 = new File('../Abc/grails-app/QueryStringCSVFiles/test1.csv') 

def row1 = ["ID", "HolderName","ReportedCountry"] 
out.append row1.join(',') 
out.append '\n' 

out1.append row1.join(',') 
out1.append '\n' 

result.each { 
    def row = [it.id, it.holderName,it.reportedCountry] 
    out.append row.join(',') 
    out.append '\n' 
    out1.append row.join(',') 
    out1.append '\n' 
} 

def link = [ 
    link1: "http://localhost:8080/projectname/Abc/grails-app/QueryStringCSVFiles/test.csv", 
    link2: "http://localhost:8080/projectname/Abc/grails-app/QueryStringCSVFiles/test1.csv" 
] 

def links = [link:[link]] 
render links as JSON 
+1

哪裏'Java'?定義「不起作用」。 – 2014-10-28 08:12:54

+0

您無法寫入文件系統,希望grails將它們放在那裏交付。 – cfrick 2014-10-28 09:00:27

回答

0

這是怎麼了我都做到了。

- 建立配置

... 
... 

plugins { 
    ... 
    ... 
    compile ":csv:0.3.1" 
    ... 
    ... 
} 

- 控制器

def downloadFile() { 
    def data = buildReport() 

    response.setHeader("Content-disposition", "attachment; filename=myReport.csv") 
    response.contentType = "text/csv" 
    def out = response.outputStream 
    out.withWriter { writer -> 
     def csvWriter = new CSVWriter(writer) 

     data.each { 
      csvWriter.writeNext(it) 
     } 

     csvWriter.flush() 
    } 

} 

def buildReport() { 
    def claims = Claims.list() 
     def report = [] 

     def headerRow = new String[3] 

     headerRow[0] = 'ID' 
     headerRow[1] = 'Holder' 
     headerRow[2] = 'Country' 

     report << headerRow 

     claims.each { 
      def dataRow = new String[3] 
      dataRow[0] = it.id 
      dataRow[1] = it.holderName 
      dataRow[2] = it.reportedCountry   
      report << dataRow 
     } 

     return report 
} 
相關問題