2011-07-22 75 views
0

我在嘗試使用上傳庫時,很難確定我在做什麼錯誤/如何解決它。我有一個包含多個字段(主要是文本)的表單,其中包含一個圖片上傳字段。輸入到文本字段中的數據已正確填充到我的數據庫中,但是用戶瀏覽到要上載的圖像文件沒有顯示在我創建的根目錄中,其權限允許將其寫入。所有的幫助非常感謝。謝謝!CI:圖片上傳到文件夾不起作用

下面

局部視圖:

<p> 
       <label for="uEventFillByDateTime">Event Fill-by Date/Time:</label> 
       <input type="text" id="uEventFillByDateTime" name="uEventFillByDateTime" /> 

      </p> 
      <p> 
       <label for="uEventImage">Event Image:</label> 
       <?php echo form_open_multipart('upload/do_upload');?> 
       <input type="file" name="uEventImage" size="20" id="uEventImage" /> 
      </p> 

      <p> 
       <label for="uEventKeywords">Event Keywords:</label> 
       <textarea id="uEventKeywords" name="uEventKeywords"></textarea> 
      </p> 

控制器電話:

public function createEvent() { 
       if(!empty($_POST)) { 
        echo $this->event_model->createEvent(); 
       } 
     } 

型號代碼:

public function createEvent() { 

      $this->image_path = realpath(APPPATH . 'event_images'); 

      $config = array(
      'allowed_types' => 'jpg|jpeg|gif|png', 
      'upload_path' => $this->image_path, 
      'max_size' => 2000, 
      'max_width' => 212, 
      'max_height' => 118 
     ); 

      $this->load->library('upload', $config); 
      $this->upload->do_upload(); 
      $image_data = $this->upload->data(); 

      /*format date time from string to mysql */ 
      $cdt = $this->input->post('cEventDateTime', true); 
      $cdtMySQL = date("Y-m-d H:i:s", strtotime($cdt)); 
      /*format fill-by date time from string to mysql */ 
      $cfdt = $this->input->post('cEventFillByDateTime', true); 
      $cfdtMySQL = date("Y-m-d H:i:s", strtotime($cfdt)); 

      $data = array(
       'event_name' => $this->input->post('cEventName', true), 
       'event_datetime' => $cdtMySQL, 
       'event_fillbydatetime' => $cfdtMySQL, 
       'event_keywords' => $this->input->post('cEventKeywords', true), 
       'event_notes' => $this->input->post('cEventNotes', true), 
       'event_featured' => $this->input->post('cEventFeatured', true), 
       'fk_venue_id' => $this->input->post('cEventVenue', true), 
       'fk_eventtype_id' => $this->input->post('cEventType', true), 
       'fk_eventlifecycle_id' => $this->input->post('cEventlifecycle', true), 
      ); 
      $this->db->insert('event', $data); 
      return $this->db->insert_id(); 
     } 

回答

0

你的目標路徑可能需要一個結尾斜槓,試試這個:

$this->image_path = realpath(APPPATH . 'event_images/'); 

嘗試的路徑玩,從手動:

upload_path:到上傳應該放在文件夾的路徑。該文件夾必須是可寫的,路徑可以是絕對的或相對的。

一般而言,永遠不會成功
您還可以在運行​​3210像這樣後得到錯誤信息:

$this->upload->display_errors(); 

這應該可以幫助您解決錯誤,或者至少弄清楚爲什麼CI不上傳圖像。

其他的事情嘗試:

  • 嘗試上傳路徑上運行var_dump(is_dir($path)),看看PHP的說。
  • 嘗試刪除使用realpath()
  • 嘗試在文檔頁面上的示例中使用./path/like/this

另注:你真的不應該是直接上傳任何東西到你的應用程序或系統目錄,任何文件,不應該直接通過HTTP訪問。這是通常的做法,也許明智的做法是創建一個單獨的/uploads目錄。
http://codeigniter.com/user_guide/libraries/file_uploading.html

0

你應該沒有在你的控制器驗證第一,它發送給你的模型前......不久,就把:

如果一切都失敗了,有另一種通過如果你錯過了什麼的文檔閱讀在您的控制器功能中上傳過程,然後成功後,您可以將發佈數據發送到您的模型。