2012-07-05 16 views
5

Chcę opublikować plik csv na moim kontrolerze przy użyciu interfejsu API. Korzystam z biblioteki REST Codeigniter by phil sturgeon. Jak zaimplementować po stronie klienta importowanie pliku CSV do mojego serwera REST. Po prostu chcę zapytać, ponieważ nie mogę znaleźć żadnej dokumentacji na jego temat.Codeigniter REST CSV import do mysql

+0

Nie jesteś wystarczająco jasny z pytaniem. Codeigniter REST jest prawie taki sam jak normalny Codeigniter, ale różnica polega na wywołaniu metody i odpowiedzi. W normalnym kodzie kodu nazywamy 'kontroler/funkcję', gdzie w REST musi być' resource/{resource_id}/child_resource/{child_resource_id} '. Nie sądzę, że będzie jakiś problem z wysłaniem nagłówków jako ".xls" file – KuKu

+0

clealy iw prostych słowach powiedz nam, co chcesz –

+0

@raheelshan Chcę wysłać plik csv na moim kontrolerze za pomocą API klienta po stronie jquery.post i wyodrębnij dane pliku csv i zaimportuj do mysql. –

Odpowiedz

27

Oto prosty sposób na zrobienie tego. Nie wiem, co ludzie robią, ale używam tej

To jest moja biblioteka czytelników csv, Zapisz to w folderze bibliotek jako 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; 
    } 
} 
?> 

i sposób kontroler

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); 
} 

A to jest widok z

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

Uwaga: To tylko do odczytu pliku, który istnieje na serwerze. Jeśli plik wymaga przesłania, użyj File Upload Class, aby przesłać plik i zapisać go w wybranej lokalizacji na serwerze, a następnie podaj ścieżkę do zlokalizowanego pliku w metodzie parse_file. I wszystko będzie dobrze.

+0

Dzięki temu spróbuję Po prostu potrzebuję danych do wyodrębnienia i przekazania go do modelu. –

+0

możesz przekazać zwróconą tablicę do modelu –

+0

jak, jeśli moje pola csv bez $ enclosure "" "zwrócą błąd, jeśli wstawię $ enclosure = ''; –