Загрузка изображения в базу данных с оригинальным именем - PullRequest
0 голосов
/ 18 февраля 2019

Я работаю над проектом codeigniter.В конфигурации загрузки изображений он зашифрован, что позволяет использовать уникальные имена файлов, чтобы избежать перезаписи и дублирования имени и для большей безопасности в целом.

Таким образом, при загрузке он зашифрует имя файла изображения и сохранит зашифрованное имя в базе данных, сохранив изображение в папке с активами.Но по какой-то причине он, похоже, не шифрует имена изображений вообще.Почти как если бы он полностью игнорировал опции $config и просто загружал изображение.

Также я попытался использовать функцию обратного вызова, чтобы избежать пустой загрузки, и снова кажется, что она также игнорируется, и публикация все еще разрешена.

Если кто-нибудь может дать совет.Пожалуйста.

Контроллер

//Callback validation
$this->form_validation->set_rules('userfile','Photo','callback_photo_check');

    if($this->form_validation->run() === FALSE){

      $this->load->view('templates/header');
      $this->load->view('posts/create', $data);
      $this->load->view('templates/footer');

    } else {

       if($this->form_validation->run()==TRUE){

      $config['upload_path'] = 'assets/images/posts';
      $config['allowed_types']        = 'gif|jpg|jpeg';
      $config['encrypt_name']         = TRUE; //TURN ON
      $config['max_size']             = 0;
      $config['max_width']            = 0;
      $config['max_height']           = 0;

      $this->upload->initialize($config);

      if(!$this->upload->do_upload('userfile')){

        $errors = array('error'=>$this->upload->display_errors());

              $this->load->view('templates/header');
              $this->load->view('posts/create', $errors);
              $this->load->view('templates/footer');

      }else {
        $this->post_model->create_post($this->upload->data('full_path'),$this->input->post());
      }

    }

    $this->session->set_flashdata('post_created','Your Post has been submitted');

    redirect('posts');

    }
  }


public function photo_check(){

if(empty($_FILES['userfile'])){
  $this->form_validation->set_message('photo_check', 'need a image');
                       return FALSE;
}

else{
  return TRUE;
}

}

Модель

public function create_post($path,$post){

$data = array(

'about'=> $this->input->post('Description'),
'image' => $path,

);

return $this->db->insert('posts',$data);

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Чтобы зашифровать имена загруженных файлов, вы должны выполнить следующие шаги:

1) Вам необходимо загрузить библиотеку шифрования.

Вы можете вызвать эту библиотеку на определенной странице, где естьзагрузить код.

// LOAD LIBRARIES
$this->load->library('encryption');

ИЛИ вы также можете загрузить его в autoload.php файл в $autoload['libraries'] = array('database','form_validation','encryption');

2) Теперь вы используете класс Encryption, вынеобходимо установить ключ шифрования в config.php файле.

$config['encryption_key'] = 'your-own-encryption-key';

Для получения дополнительной информации о шифровании => https://codeigniter.com/user_guide/libraries/encryption.html

3) И, наконец, в вашей загрузкекод $config['encrypt_name'] = TRUE;.

Надеюсь, это поможет.

0 голосов
/ 18 февраля 2019

У меня раньше была такая же проблема, затем я решил дать им (файлам) уникальное имя, что я и сделал: • Я назначил пустую переменную, которая будет содержать данные имени файла / пути, которые должны быть изменены, и я назвалэто как $info_name.• Каждый раз, когда имя файла будет иметь дубликат в существующем местоположении, будет добавляться уникальное расширение, например время (секунды, дата и т. Д.).

Вот мой пример кода:

public function new_info($data,$photo){
    extract($data);
    $info_name = "";
    $directory = "C:/xampp/htdocs/Parent folder/child folder/grand child folder/";
    $extension= array("jpeg","jpg","png","gif");
    $file_name=$photo["form_name"]["name"];
    $file_tmp=$photo["form_name"]["tmp_name"];
    $ext=pathinfo($file_name,PATHINFO_EXTENSION);
    if(in_array($ext,$extension)){
        if(!file_exists($directory.$file_name)){
            move_uploaded_file($file_tmp=$photo["form_name"]["tmp_name"],$directory.$file_name);
            $info_name = $file_name;
        }
        else{
            $filename=basename($file_name,$ext);
            $newFileName=$filename.time().".".$ext;
            move_uploaded_file($file_tmp=$photo["form_name"]["tmp_name"],$directory.$newFileName);
            $info_name = $newFileName;
        }
    }

   // then your sql code here for example: 
   $data= array( 'user' => $_SESSION["user_id"],
                 'picture' => $info_name,
                );
    $this->db->insert('sys_post',$data);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...