Codeigniter - проблема при загрузке изображения в формате png - PullRequest
0 голосов
/ 05 июля 2018

Я реализовал веб-сервис для обновления изображения профиля, используя платформу Codeigniter. Но у меня есть проблема при загрузке PNG изображения. Всегда выдает ошибку:

Тип файла, который вы пытаетесь загрузить, недопустим.

Ниже приведен мой конфигурационный массив:

 $config = array(
             'upload_path' => BASEPATH .'../assets/uploads/profile_images',
             'allowed_types' => 'jpg|png|jpeg',
             'overwrite' => TRUE,
             'max_size' => "2048000",
         );

Я добавил «png» в разрешенные типы, но он все еще показывает ошибку. Пожалуйста, руководство.

1 Ответ

0 голосов
/ 06 июля 2018

Вместо использования

   config['allowed_types'] = 'jpg|png|jpeg'

Я изменил свой конфигурационный массив на

$config = array(
          'upload_path' => BASEPATH .'../assets/uploads/profile_images',
          'allowed_types' => '*',
          'overwrite' => TRUE,
          'max_size' => "2048000",
       );

И добавлено пользовательское правило проверки формы

$this->form_validation->set_rules('profile_image', '', 'callback_file_check');

и соответствующая ему функция с именем file_check (). Здесь я буду проверять тип файла и возвращать ошибку, если это не изображение.

/**
    Function: file_check
    Description: file value and type check during validation
    Date: 6th July 2018
**/
public function file_check($str)
{
    $allowed_mime_type_arr = array('image/gif','image/jpeg','image/pjpeg','image/png','image/x-png');

    $mime = mime_content_type($_FILES['profile_image']['tmp_name']);
    if(isset($_FILES['profile_image']['tmp_name']) && $_FILES['profile_image']['tmp_name']!="")
    {
        if(in_array($mime, $allowed_mime_type_arr))
        {
            return true;
        } else {
            $this->form_validation->set_message('file_check', 'Please select only jpg/jpeg/png file.');
            return false;
        }
    }else{
        $this->form_validation->set_message('file_check', 'Please choose a file to upload.');
        return false;
    }
}

Так что моя функция загрузки будет выглядеть так

if($this->form_validation->run() == true) {
    if (!$this->upload->do_upload('profile_image')) {
        return $this->response(['msg'=>$this->upload->display_errors(),'success'=>false,'code'=>400]);
    } else {
        $fileName = $this->upload->data();
        $name = $fileName['file_name'];
    }

    //Save into database
    $image = $this->Api_model->update_profile_image('assets/uploads/profile_images/'.$name, $request_data['user_id']);
    if($image)
        return $this->response(['msg'=>'Image updated successfully','success'=>true,'code'=>200, 'image_path' => base_url().$image]);
    else
        return $this->response(['msg'=>'Image updated failed','success'=>false,'code'=>400]);
    } else {
    return $this->response(['msg' => validation_errors(), 'success' => false, 'code' => 401]);
}
...