2014-01-27 70 views
4

例如: 我有一個CSV文件這樣如何從csv文件中獲取數據並使用mysql保存到grails中?

enter image description here

,我想它保存到database..with上傳CSV的文件。

這是我上傳CSV文件

<input type="file" name="filecsv"/> 
<input type="button" class="upload" value="Upload 
      onclick='location.href ="${createLink(url: [action: 'upload'])}"'/> 

編碼我在groovy..i混淆嘗試這樣的代碼,但沒有成功。

def upload = { 
     println params.filecsv 
    new File('filecsv').splitEachLine(',') {fields -> 
    def city = new City(
     city: fields[0].trim(), 
     description: fields[1].trim() 
    ) 

    if (city.hasErrors() || city.save(flush: true) == null) { 
     log.error("Could not import domainObject ${city.errors}") 
    } 

    log.debug("Importing domainObject ${city.toString()}") 
} 

Parse CSV and export into Mysql database in Grails

如何從文件CSV數據,並保存到mysql數據庫?

+0

http://grails.org/plugin/excel-import可能是值得一看 – rcgeorge23

+0

而且,什麼呢_ 「......但不是成功」 _是什麼意思?你有錯誤嗎? –

+0

我已經編輯我的文章,我不能得到這個路徑「」但是它成功,如果新文件('C:\\ user \\ desktop \\ book1。 csv')。splitEachLine(','){fields - > – akiong

回答

7

您需要從MultipartFile你傳遞as shown in the documentation:

<g:uploadForm action="upload"> 
    <input type="file" name="filecsv" /> 
    <input type="submit" /> 
</g:uploadForm> 

然後得到InputStream的;

def upload = { 
    request.getFile('filecsv') 
      .inputStream 
      .splitEachLine(',') { fields -> 
     def city = new City(city: fields[0].trim(), 
          description: fields[1].trim()) 

     if (city.hasErrors() || city.save(flush: true) == null) { 
      log.error("Could not import domainObject ${city.errors}") 
     } 

     log.debug("Importing domainObject ${city.toString()}") 
    } 
} 
+0

2014-01-27 16:44:54,047 [http-8080-4] ERROR errors.GrailsExceptionResolver - 沒有方法簽名:org.springframework.security.web。 servletapi.SecurityContextHolderAwareRequestWrapper.getFile()適用於參數類型:(java.lang.String)values:[filecsv] 可能的解決方案:getXML(),getAt(java.lang.String),getAt(java.lang.String) ,getLocale(),getJSON(),getHeader(java.lang.String) groovy.lang.MissingMethodException:沒有方法的簽名:org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper.getFile() – akiong

+0

你正在使用' uploadsporm'在GSP是嗎? –

+0

呃..我已經刪除了它... – akiong

0

你可以這樣做。

  1. 使用Grails CSV插件上傳和解析CSV文件
plugins {  
     //TODO other plugins   
     compile(":csv:0.3.1") // add this entry in BuildConfig.groovy   
    } 

請確保您有在控制器/服務的CSV數據,在這裏你去

  1. 控制器/服務使用低於邏輯

    //Read the CSV file data excluding the header  
    filecsv.inputStream.toCsvReader(['skipLines':1]).eachLine { tokens ->  
    //parse the csv columns 
    def name= tokens[0].trim() 
    def class= tokens[1].trim() 
    def age = tokens[2].trim() 
    def phone = tokens[3].trim() 
    
    //assign the csv column values to domain object 
    City city = new City() // this is your domain/table that you used to insert csv data 
    city.name = name 
    city.class = class 
    city.age = age 
    if(!city.save(validate: true)){ 
        city.errors.each { 
        log.debug(it) 
        } 
    } 
    

    }

+0

問題目前不是CSV的解析,它是在控制器中獲取多部分表單 –

相關問題