2009-12-11 5 views
1

Je cherche à créer un formulaire-upload d'image avec CodeIgniter 1.7.2répertoire de téléchargement non valide avec CodeIgniter 1.7.2

Cependant, lorsque je tente de télécharger une image, CI me informe le répertoire de téléchargement est invalide.

Pour vérifier cela, j'ai téléchargé un fichier dans le répertoire uploads appelé test.txt avec le contenu Hello, World! je puis en écho le contenu de celui-ci, et voilà, il dit bonjour. Au-delà de cela, je peux naviguer dans le répertoire et voir le contenu de celui-ci dans mon navigateur, donc le répertoire existe définitivement et est visible.

Controller:

class Pictures extends Site_Controller { 
    // snip... 
    public function upload() { 
     $this->load->helper('form'); 
     $this->_render('Do Upload','pictures/upload',array('msg'=>'')); 
    } 
    public function do_upload() { 
     $this->load->helper('form'); 

     $config['upload_path'] = base_url().'uploads/'; 
     // test the directory: 
     // echo file_get_contents($config['upload_path'].'test.txt'); 
     // should echo "Hello, World!" 
     $config['allowed_types'] = 'gif|jpg|png'; 
     $config['max_size'] = '2048'; 
     $config['max_width'] = '1024'; 
     $config['max_height'] = '768'; 

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

     if (! $this->upload->do_upload()) 
     { 
      $data = array('msg' => $this->upload->display_errors()); 

      $this->_render('Do Upload (Errors!)','pictures/upload',$data); 
     }  
     else 
     { 
      $uploaddata = $this->upload->data(); 
      $this->load->model('pictures_Model','pictures'); 
      $this->pictures->insertUploaded($uploaddata,$this->input->post('name'),$this->input->post('caption')); 

      $data['msg'] = 'Successful Upload!'; 
      $this->_render('Do Upload (Success!)','pictures/upload',$data); 
     } 
    } 
    //... 
} 

$this->_render() est juste une fonction de raccourci qui enveloppe la vue spécifiée avec les données spécifiées dans une mise en page avec un titre spécifié.

pictures/upload Vue:

<h1>Do Upload</h1> 
<? if (isset($msg)) echo $msg; ?> 

<?= form_open_multipart('pictures/do_upload');?> 

<input type="file" name="userfile" /> 
<input type="text" name="name" /> 
<input type="text" name="caption" /> 

<br /><br /> 

<input type="submit" value="Upload" /> 

</form> 

Enfin, et probablement inutile, l'insert modèle:

public function insertUploaded($data,$name,$caption) { 
    $row = array(); 
    $row['filename'] = $data['file_name']; 
    $row['mime'] = $data['file_type']; 
    $row['size'] = $data['file_size']; 
    $row['name'] = $name; 
    $row['caption'] = $caption; 
    $row['img'] = file_get_contents($data['full_path']); 

    $this->db->insert('pictures',$row); 
} 

Toute idée pourquoi mon répertoire de téléchargement est invalide?

Répondre

6
$config['upload_path'] = base_url().'uploads/'; 

Vous devriez changer cela:

$config['upload_path'] = './uploads/'; 
+0

Pourquoi cela fonctionne-t-il? –

+1

Le chemin de téléchargement doit être un chemin de fichier sur votre serveur, pas une URL. – bradym

1

CI génère cette erreur quand il ne parvient pas à trouver le répertoire ou même si le répertoire est illisible. Tout d'abord essayer de trouver que le répertoire se passe bien comme:

echo base_url().'uploads/'; 

Si cela vient, vérifiez avec les autorisations du répertoire. chmod à 755.

Si même l'autorisation de répertoire est correcte, essayez d'ajouter la ligne ci-dessous à votre chemin de téléchargement. Assurez-vous que votre chemin se passe bien en écho à l'extérieur.

Espérons que ça aide.

Questions connexes