2012-07-05 117 views
5

我要發佈使用API​​.I'm使用笨REST庫由Phil鱘我控制器上csv文件。如何在客戶端實現CSV到我的REST服務器的導入。我只是想問一下,因爲我找不到任何關於它的文檔。笨REST CSV導入到MySQL

+0

你對這個問題還不夠清楚。 Codeigniter REST與普通Codeigniter幾乎相同,但區別在於調用方法和響應。 在正常的codeigniter中,我們調用'controller/function',在REST中它必須是'resource/{resource_id}/child_resource/{child_resource_id}'。 我不會有任何問題發送頭文件爲'.xls'文件 – KuKu

+0

clealy和簡單的話告訴我們你想要什麼 –

+0

@raheelshan我想發佈csv文件在我的控制器上使用客戶端API jquery.post並提取csv文件數據並導入到mysql。 –

回答

27

下面是一個簡單的方法來做到這一點。我不知道是什麼人做的,但我用這個

這是我的CSV讀者庫,在庫中保存此文件夾csvreader.php。

<?php if (!defined('BASEPATH')) exit('No direct script access allowed'); 

class CSVReader { 

    var $fields;   /** columns names retrieved after parsing */ 
    var $separator = ';'; /** separator used to explode each line */ 
    var $enclosure = '"'; /** enclosure used to decorate each field */ 

    var $max_row_size = 4096; /** maximum row size to be used for decoding */ 

    function parse_file($p_Filepath) 
    { 
     $file   = fopen($p_Filepath, 'r'); 
     $this->fields = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure); 
     $keys_values  = explode(',',$this->fields[0]); 

     $content   = array(); 
     $keys   = $this->escape_string($keys_values); 

     $i = 1; 
     while(($row = fgetcsv($file, $this->max_row_size, $this->separator, $this->enclosure)) != false) 
     { 
      if($row != null) { // skip empty lines 
       $values   = explode(',',$row[0]); 
       if(count($keys) == count($values)){ 
        $arr   = array(); 
        $new_values = array(); 
        $new_values = $this->escape_string($values); 
        for($j=0;$j<count($keys);$j++){ 
         if($keys[$j] != ""){ 
          $arr[$keys[$j]] = $new_values[$j]; 
         } 
        } 
        $content[$i] = $arr; 
        $i++; 
       } 
      } 
     } 
     fclose($file); 
     return $content; 
    } 

    function escape_string($data) 
    { 
     $result = array(); 
     foreach($data as $row){ 
      $result[] = str_replace('"', '',$row); 
     } 
     return $result; 
    } 
} 
?> 

和控制器的方法

function readExcel() 
{ 
     $this->load->library('csvreader'); 
     $result = $this->csvreader->parse_file('Test.csv');//path to csv file 

     $data['csvData'] = $result; 
     $this->load->view('view_csv', $data); 
} 

這是鑑於

<table cellpadding="0" cellspacing="0" width="100%"> 
    <tr> 
      <td width = "10%">ID</td> 
      <td width = "20%">NAME</td> 
      <td width = "20%">SHORT DESCRIPTION</td> 
      <td width = "30%">LONG DESCRIPTION</td> 
      <td width = "10%">STATUS</td> 
      <td width = "10%">PARENTID</td> 
    </tr> 

      <?php foreach($csvData as $field){?> 
       <tr> 
        <td><?php echo $field['id']?></td> 
        <td><?php echo $field['name']?></td> 
        <td><?php echo $field['shortdesc']?></td> 
        <td><?php echo $field['longdesc']?></td> 
        <td><?php echo $field['status']?></td> 
        <td><?php echo $field['parentid']?></td> 
       </tr> 
      <?php }?> 
</table> 

注意:這將只讀取它存在於服務器上的文件。如果需要上傳文件,則使用File Upload Class上傳文件並將其保存到服務器上的某個位置,然後在parse_file方法中指定找到的文件的路徑。一切都會正常工作。

+0

謝謝我會試一試我只需要提取數據並將其傳遞給模型。 –

+0

你可以通過返回數組來模擬 –

+0

如何,如果我沒有$圈地「「」它會返回錯誤,如果我把$外殼=‘’CSV字段; –