2012-07-05 113 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字段; –