2010-11-01 4 views
11

En utilisant CodeIgniter, j'essaie de modifier le nom du fichier téléchargé en camelCase en supprimant tous les espaces et en capitalisant les mots suivants.Renommer un fichier téléchargé dans CodeIgniter

Je suis assez sûr que je peux renommer le fichier en utilisant le deuxième paramètre de move_uploaded_file mais je ne sais même pas où chercher pour savoir comment modifier le nom de camelCase.

Merci d'avance! Jon

Répondre

14

Découvrez la bibliothèque de téléchargement de CI:

http://www.codeigniter.com/user_guide/libraries/file_uploading.html

Voyons d'abord jeter un oeil à la façon de faire un téléchargement simple fichier sans changer le nom du fichier:

$config['upload_path'] = './uploads/'; 
$config['allowed_types'] = 'jpg|jpeg|gif|png'; 

$this->upload->initialize($config); 

if (! $this->upload->do_upload()) 
{ 
    $error = $this->upload->display_errors(); 
} 
else 
{ 
    $file_data = $this->upload->data(); 
} 

Il est simple et ça marche plutôt bien. Maintenant, jetons un coup d'œil à la viande de votre problème. Nous devons d'abord obtenir le nom de fichier à partir du tableau $ _FILES:

$file_name = $_FILES['file_var_name']['name']; 

Ensuite, on peut diviser la chaîne avec un séparateur _ comme ceci:

$file_name_pieces = split('_', $file_name); 

Ensuite, nous allons devoir parcourir la liste et faire une nouvelle chaîne où tous, sauf la première place ont des lettres en majuscules:

$new_file_name = ''; 
$count = 1; 

foreach($file_name_pieces as $piece) 
{ 
    if ($count !== 1) 
    { 
     $piece = ucfirst($piece); 
    } 

    $new_file_name .= $piece; 
    $count++; 
} 

maintenant que nous avons le nouveau nom, nous pouvons revenir sur ce que nous avons fait ci-dessus. Fondamentalement, vous faites tout pareil sauf que vous ajoutez ce $ config param:

$config['file_name'] = $new_file_name; 

Et cela devrait le faire! Par défaut, CI a le paramètre overwrite $ config défini sur FALSE, donc s'il y a des conflits, il ajoutera un nombre à la fin de votre nom de fichier. Pour la liste complète des paramètres, voir le lien en haut de cet article.

+0

travaillé ... merci beaucoup – jgravois

+0

Grande réponse! Ça m'aide beaucoup. –

+0

J'essaie de passer de l'utilisation du délimiteur '_' à l'utilisation de' .'. En termes d'exploser sur le délimiteur '.', Un nom de fichier utilisant '.' au lieu de' _' a plus de sens. Cependant, pour une raison quelconque, la sauvegarde ne prend pas mes noms '.', mais insiste pour utiliser' _'. Quelqu'un a rencontré ce genre de problème en renommant les images avec CI? – TARKUS

0
$file_name = preg_replace('/[^a-zA-Z]/', '', ucwords($_FILES['file_var_name']['name'])); 
3
$this->load->helper('inflector'); 
$file_name = underscore($_FILES['file_var_name']['name']); 
$config['file_name'] = $file_name; 

qui devrait fonctionner trop

Questions connexes