在 CodeIgniter 中更改上传文件的名称(点和下划线)

Posted

技术标签:

【中文标题】在 CodeIgniter 中更改上传文件的名称(点和下划线)【英文标题】:Changing name of the uploaded file in CodeIgniter (dots & underscores) 【发布时间】:2011-08-09 08:11:49 【问题描述】:

我在更改上传文件的名称时遇到了一些问题:

$config = array(
        'allowed_types' => 'mp3',
        'file_name' => $fulltitle,       // Lets say we've entered 'a.s.d.f.mp3'
        'upload_path' => './music/'
    );
$this->load->library('upload', $config);        
$this->upload->do_upload(); 

但是,当我检查我的文件名时,它会显示给我

a.s_.d_.f_.mp3

为什么 CodeIgniter 在第一个点之后的每个点之前添加下划线?我怎样才能禁用它? 谢谢。

添加

好吧,我找到了解决方案。系统->库->上传.php文件。

第 994 行,_prep_filename() 函数。

        $parts      = explode('.', $filename);
    $ext        = array_pop($parts);
    $filename   = array_shift($parts);

    foreach ($parts as $part)
    
        if ( ! in_array(strtolower($part), $this->allowed_types) OR $this->mimes_types(strtolower($part)) === FALSE)
        
            $filename .= '.'.$part.'_'; // Line 994
        
        else
        
            $filename .= '.'.$part;
        
    

【问题讨论】:

我只是浏览了一下,也发现了这一点。你在我之前得到它。 :) 有没有办法不用直接修改系统文件就可以达到这个效果? 我试图在我的文件名中使用点,但没办法,CodeIgniter 不行。因此,当我指定abcdefg.room.001.jpg 之类的内容时,它会自动重命名文件abcdefg_room_001.jpg。我更喜欢使用点,因为我想做explode(".","abcdefg.room.001.jpg"); 之类的事情,否则我必须使用 strpos 和 substr 进行更复杂的字符串操作。 不错的发现,@Cyber​​Lom ! 【参考方案1】:

尝试将'remove_spaces' => FALSE 添加到您的配置数组中,看看是否能解决问题。默认情况下设置为 TRUE,但它应该只用下划线替换空格。可能是文件上传类的 CI 错误。

【讨论】:

以上是关于在 CodeIgniter 中更改上传文件的名称(点和下划线)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 [codeigniter] 中上传具有随机名称规则的图像

如何在 Codeigniter 中上传文件名时添加前缀?

如何将图像路径和名称上传到数据库 - Codeigniter

“上传路径似乎无效”。 Codeigniter文件上传不起作用[关闭]

将表单文件附加到电子邮件,Codeigniter

将图像上载到CodeIgniter中的另一个目录