2012-07-07 97 views
1

我正在開發一個php用戶可以上傳csv文件的網站。點擊「上傳」按鈕後,文件被重命名並以'upload'.time()格式保存。上傳文件後,我需要顯示上傳文件的內容。 到目前爲止,我已經能夠正確上傳文件,並且已經用靜態文件名進行了測試,並且能夠完美地讀取csv文件。但是當我想要上傳剛剛上傳的文件名時,我沒有得到任何地方。搜索整個網站,但沒有得到任何解決方案,爲我工作。 我正在使用codeigniter 2.1.0。如何在codeigniter中檢索最近上傳的文件名

Controller文件:

<?php  
class Csv_ci extends CI_Controller { 

function is_logged() { 
    $is_logged_in = $this->session->userdata('is_logged_in'); 
    if (!isset($is_logged_in) || $is_logged_in != true) 
     return false; 
    else 
     return true; 
} 

function index() { 
    if ($this->is_logged() == TRUE) { 
     $this->load->model('Csv_model'); 

     if ($this->input->post('upload')) { 
      $name = $this->Csv_model->do_upload(); 
      //print_r($name); 
      if (isset($name)) { 
       $filePath = "localhost/map_ci/csv/" . $name; 
       //$filePath = './csv/bank_data.csv'; 
       $row = 1; 
       if (($handle = fopen($filePath, "r")) !== FALSE) { 
        while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 
         $num = count($data); 

         $file_data[$row]['district_name'] = $data[1]; 
         $file_data[$row]['bank_name'] = $data[2]; 
         $file_data[$row]['area_name'] = $data[3]; 
         $file_data[$row]['address'] = $data[4]; 
         $row++; 
        } 

        fclose($handle); 
       } 
       $this->load->view('csvshow', array('file_data' => $file_data)); 
      } 
     } 
    } 
    else $this->load->view('invalid_member'); 
    } 
} 

型號文件:

<?php 

class Csv_model extends CI_Model { 

var $gallery_path; 
var $gallery_path_url; 

function Csv_model() { 
    parent::__construct(); 


    $this->gallery_path = realpath(APPPATH . '../csv'); 
    $this->gallery_path_url = base_url() . 'csv/'; 
} 

function do_upload() { 
    $config = array(
     'upload_path' => $this->gallery_path, 
     'allowed_types' => 'text/csv|csv|text/x-comma-separated-values|text/comma-separated-values|application/x-csv|text/x-csv|text/csv|application/csv|', 
     'max_size' => '5000', 
     'file_name' => 'upload' . time() 
    ); 


    $this->load->library('upload', $config); 

    if (!$this->upload->do_upload()) 
     echo $this->upload->display_errors(); 
    else { 
     $file_info = $this->upload->data(); 
     $csvfilepath = "csv/" . $file_info['file_name']; 
     $this->addfromcsv($csvfilepath); 
     $filename = $file_info['file_name']; 
     // print_r($filename); 
     return $filename; 
    } 
} 
} 

找回我做file_info['file_name']文件名。 請幫我找一個解決方案。

更新: 從我的代碼中刪除$csvfilepath = "csv/" . $file_info['file_name']; $this->addfromcsv($csvfilepath);這兩行後,我的當前問題已解決。現在它返回上傳的文件name.yet來檢查是否完全正常工作。

更新2:代碼運行良好 感謝所有的幫助。

+0

你確定$名稱中包含什麼?如果我沒有弄錯,你需要使用文件系統中的文件地址而不是localhost/map_ci/csv /它應該是類似於d:/folder/filename.jpg – 2012-07-07 07:09:50

+0

我嘗試打印任何$文件名但沒有任何東西被傾倒,所以$ name沒有返回任何東西。首先我需要名稱,然後我可以正確地更正文件路徑。任何想法如何解決它? – sbr1308 2012-07-07 09:05:51

回答

2

您可以從​​3210返回並聯$config['upload_path'] & $config['file_name']並使用它讀取相應的文件。

0

我認爲這個問題是在$this->upload->data()

嘗試從​​3210

0
$data = $this->upload->data(); 
print_r($data); 

返回返回$config['file_name']

Array 
(
[file_name] => mypic.jpg 
[file_type] => image/jpeg 
[file_path] => /path/to/your/upload/ 
[full_path] => /path/to/your/upload/jpg.jpg 
[raw_name]  => mypic 
[orig_name] => mypic.jpg 
[client_name] => mypic.jpg 
[file_ext]  => .jpg 
[file_size] => 22.2 
[is_image]  => 1 
[image_width] => 800 
[image_height] => 600 
[image_type] => jpeg 
[image_size_str] => width="800" height="200" 
)` 

這樣:$file_name = $data['file_name'];

- 或 -

$file = $data['file_path'].$data['file_name'];

+0

謝謝。即使我嘗試先用'$ file_info ['file_name']'的方法做同樣的事情,它不起作用,但是現在它在我刪除'$ csvfilepath =「csv /」時工作。 $ FILE_INFO [ 'FILE_NAME']; $ this-> addfromcsv($ csvfilepath);' – sbr1308 2012-07-08 07:12:57

0

只需使用:

$this->upload->file_name;