在CodeIgniter中重命名上传的文件

时间:2010-11-01 22:53:10

标签: codeigniter

使用CodeIgniter,我试图通过删除任何空格并大写后续单词来修改上传文件的名称为camelCase。

我很确定我可以使用move_uploaded_file的第二个参数重命名该文件,但我甚至不知道在哪里查找如何将名称修改为camelCase。

提前致谢! 乔恩

3 个答案:

答案 0 :(得分:14)

查看CI的上传库:

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

让我们首先看看如何在不更改文件名的情况下进行简单的文件上传:

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

就是这么简单,效果很好。

现在,让我们来看看问题的关键。首先,我们需要从$ _FILES数组中获取文件名:

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

然后我们可以用_分隔符拆分字符串,如下所示:

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

然后我们必须遍历列表并创建一个新字符串,其中除第一个点以外的所有字符都有大写字母:

$new_file_name = '';
$count = 1;

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

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

现在我们有了新的文件名,我们可以重新审视上面的内容。基本上,除了添加这个$ config参数外,你做的一切都是一样的:

$config['file_name'] = $new_file_name;

应该这样做!默认情况下,CI将overwrite $ config参数设置为FALSE,因此如果存在任何冲突,它会在文件名末尾附加一个数字。有关参数的完整列表,请参阅本文顶部的链接。

答案 1 :(得分:3)

$this->load->helper('inflector');
$file_name = underscore($_FILES['file_var_name']['name']);
$config['file_name'] = $file_name;

也应该有用

答案 2 :(得分:0)

$file_name = preg_replace('/[^a-zA-Z]/', '', ucwords($_FILES['file_var_name']['name']));