2009-10-05 6 views
0

J'ai un formulaire de téléchargement d'images multiples, et le code suivant fonctionne bien pour le téléchargement. J'ai besoin de sauvegarder les noms de fichiers dans la base de données, mais je n'arrive pas à comprendre comment le faire correctement.Obtenir les noms de fichiers JavaScript des formulaires JavaScript dans CodeIgniter

uploadform.php:

echo form_open_multipart('gallery/upload'); 
    <input type="file" name="photo" size="50" /> 
    <input type="file" name="thumb" size="50" /> 
    <input type="submit" value="Upload" /> 
</form> 

gallery_model.php

function multiple_upload($upload_dir = 'uploads/', $config = array()) 
{ 

    /* Upload */ 

    $CI =& get_instance(); 
    $files = array(); 

    if(empty($config)) 
    { 
     $config['upload_path'] = realpath($upload_dir); 
     $config['allowed_types'] = 'gif|jpg|jpeg|jpe|png'; 
     $config['max_size']  = '2048'; 
    } 

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

     $errors = FALSE; 

     foreach($_FILES as $key => $value) 
     {    
      if(! empty($value['name'])) 
      { 
       if(! $CI->upload->do_upload($key)) 
       {           
        $data['upload_message'] = $CI->upload->display_errors(ERR_OPEN, ERR_CLOSE); // ERR_OPEN and ERR_CLOSE are error delimiters defined in a config file 
        $CI->load->vars($data); 

        $errors = TRUE; 
       } 
       else 
       { 
        // Build a file array from all uploaded files 
        $files[] = $CI->upload->data(); 
       } 
      } 
     } 


     // There was errors, we have to delete the uploaded files 
     if($errors) 
     {      
      foreach($files as $key => $file) 
      { 
       @unlink($file['full_path']);  
      }      
     } 
     elseif(empty($files) AND empty($data['upload_message'])) 
     { 
      $CI->lang->load('upload'); 
      $data['upload_message'] = ERR_OPEN.$CI->lang->line('upload_no_file_selected').ERR_CLOSE; 
      $CI->load->vars($data); 
     } 
     else 
     { 
      return $files; 


     } 



     /* ------------------------------- 
     Insert to database */ 

     // problem is here, i need file names to add db. 
     // if there is already same names file at the folder, it rename file itself. so in such case, I need renamed file name :/ 



    }  
} 
+0

hmm, juste découvert sth: $ files [0] ["nom_fichier"] $ files [1] ["nom_fichier"] donne les noms de fichiers renommés. –

Répondre

1

Vous devez garder votre modèle uniquement pour les opérations de base de données. Tout le traitement du téléchargement et le déplacement du fichier doivent être effectués dans le contrôleur. Le modèle doit insérer le dossier sur la photo dans la base de données et c'est à ce sujet.

Et en réponse à votre question faites un print_r($files) et voyez ce qu'il contient. Il devrait avoir les noms de fichiers d'origine. Ce sera probablement quelque chose comme artmania dit ci-dessus: $files[0]['file_name']. Vous devriez être en mesure de boucle à travers votre réseau de fichiers $ avec une construction comme celle-foreach:

foreach($files as $file) { 
    $file_name = $file['file_name']; 
} 

Vous pouvez obtenir toutes les autres données sur le fichier de la même manière. Le manuel CodeIgniter dit à propos $this->upload->data():

Ceci est une fonction d'aide qui retourne un tableau contenant toutes les données liées au fichier que vous avez téléchargé. Ici est le prototype de tableau:

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 
    [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" 
) 

Fore plus d'info check out the manual.

Questions connexes