PHP Codeigniter上传类,重命名具有特定架构的文件

时间:2012-09-30 05:44:23

标签: php codeigniter upload

我遇到了Codeigniter的问题,并且在上传过程中从要提供的上传库中重命名文件。现在在任何人说出来之前,我并不是在寻找“加密”的文件名。

我的问题是在上传图片时,您可能会遇到很多类型的图片。那么如何使用file_name配置选项将文件名更改为特定模式(我已经将模式部分启动并运行)。但保持相同的文件类型?

现在我正在尝试

$upload_config['file_name'] = $generated_filename_from_schema

唯一的问题是$generated_filename_from_schema没有文件扩展名,并且将文件扩展名排除在等式CI之外似乎完全忽略了它,只需要获取文件并追加_1,_2,_3,因为它在文件中上升具有相同的名称,否则它只保留完整的名称。

现在我必须将$config传递给CI,以便上传文件,但是如何在上传之前确定我正在使用的文件类型,以便我可以使用我的名称生成模式。

*的 修改 *

    $upload_config['upload_path'] = realpath(APPPATH.'../images/');
    $upload_config['allowed_types'] = 'gif|jpg|png';
    $upload_config['max_size']  = 0;
    $upload_config['max_width'] = 0;
    $upload_config['max_height'] = 0;
    $upload_config['remove_spaces'] = true;

    $upload_config['file_name'] = $this->genfunc->genFileName($uid);

    if($this->input->post('uploads'))
    {

        $this->load->library('upload');
        $this->upload->initialize($upload_config);

        if (!$this->upload->do_upload())
        {
            //echo 'error';
            echo $config['upload_path'];
            $this->data['errors'] = $this->upload->display_errors();
        }
        else
        {
            //echo 'uploaded';
            $this->data['upload_data'] = $this->upload->data();
        }
    }

2 个答案:

答案 0 :(得分:10)

您可以使用 $ _ FILES数组获取文件的原始名称

提取原始文件的扩展名。然后,附加到新文件名。

尝试以下

$ext = end(explode(".", $_FILES[$input_file_field_name]['name']));
$upload_config['file_name'] = $this->genfunc->genFileName($uid).'.'.$ext;

答案 1 :(得分:2)

就个人而言,我发现CodeIgniter的文件上传类有些麻烦。如果你想要一个vanilla PHP解决方案:

function submit_image(){
    $f = $_FILES['image'];
    $allowedTypes = array(IMAGETYPE_PNG, IMAGETYPE_JPEG, IMAGETYPE_GIF);
    $detectedType = exif_imagetype($f['tmp_name']);
    if(in_array($detectedType, $allowedTypes)){
        $pi = pathinfo($f['name']);
        $ext = $pi['extension'];
        $target = $this->genfunc->genFileName($uid) "." . $ext;
        if(move_uploaded_file($f['tmp_name'], $target)){
            /*success*/
        }
        else {/*couldn't save the file (perhaps permission error?*/}
    }
    else {/*invalid file type*/}
}