2010-11-01 24 views
11

Utilizzando CodeIgniter, sto cercando di modificare il nome del file caricato camelCase rimuovendo tutti gli spazi e capitalizzare le parole successive.Rinominare un file caricato in CodeIgniter

Sono abbastanza sicuro di poter rinominare il file utilizzando il secondo parametro di move_uploaded_file ma non so nemmeno dove cercare per capire come modificare il nome in camelCase.

Grazie in anticipo! Jon

risposta

14

Partenza biblioteca di upload del CI:

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

Diamo prima un'occhiata a come fare un semplice upload di file senza cambiare il nome del file:

$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(); 
} 

E 'così semplice e funziona abbastanza bene.

Ora, diamo uno sguardo alla carne del problema. In primo luogo abbiamo bisogno di ottenere il nome del file dal array $ _FILES:

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

Poi possiamo dividere la stringa con un delimitatore _ come questo:

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

Poi dovremo iterare il lista e fare una nuova stringa in cui tutti tranne il primo spot hanno lettere maiuscole:

$new_file_name = ''; 
$count = 1; 

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

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

Ora che abbiamo il nuovo nome del file, possiamo rivedere ciò che abbiamo fatto in precedenza. In sostanza, si fa tutto lo stesso, tranne che si aggiunge questo $ config param:

$config['file_name'] = $new_file_name; 

e che dovrebbe farlo! Per impostazione predefinita, CI ha la overwrite $ config param insieme a FALSE, quindi se ci sono eventuali conflitti, si aggiungerà un numero alla fine del nome del file. Per l'elenco completo dei parametri, vedere il collegamento nella parte superiore di questo post.

+0

lavorato ... Grazie notevolmente – jgravois

+0

Grande risposta! Questo mi aiuta molto. –

+0

Sto cercando di passare dall'utilizzo del '_' delimitatore di utilizzare il' .'. In termini di esplodere sul delimitatore '.', un nome di file utilizzando' .' invece di '_' ha più senso. Comunque, per qualche ragione il salvataggio non sta prendendo i miei nomi '.', ma insiste sull'uso di' _'. Qualcuno si imbatte in questo tipo di problema rinominando le immagini con 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; 

che dovrebbe funzionare anche