CodeIgniter 3. Загрузите изображение дважды, но с другим именем файла - PullRequest
0 голосов
/ 17 апреля 2020

[решено]

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

Вот моя форма (просмотр. php):

<form action="<?php echo base_url("process/testFunction"); ?>" enctype="multipart/form-data" method="post">
 <input type="file" name="file_data" size="50" required>
 <input type="hidden" name="user_id" value="<?php echo $this->session->userdata('user_id'); ?>" readonly>
 <input type="hidden" name="purpose" value="Picture" readonly>
 <input type="submit" value="Save Changes">
</form>

контроллер. php:

function testFunction(){
 $userID = $this->input->post('user_id');
 $purpose = $this->input->post('purpose');
 $randomText = time();

 if($purpose == "Picture"){
  $uploadPath = "./uploads/images/";
  $allowedTypes = "jpg|jpeg|png";
  $maxSize = 10000000;
  $fileName = "PP_".$userID.".jpeg";
  $fileName2 = "PP_".$userID."_".$randomText.".jpeg"; //for backup
 }

 $config = array(
   'upload_path' => $uploadPath,
   'allowed_types' => $allowedTypes,
   'max_size' => $maxSize, 
   'file_name' => $fileName
 );

 $configClone = array(
   'upload_path' => $uploadPath,
   'allowed_types' => $allowedTypes,
   'max_size' => $maxSize, 
   'file_name' => $fileName2
 );

 $this->load->library('upload', $config);
 $this->load->library('upload', $configClone);

 if($this->upload->do_upload('file_data')){
   echo "Uploaded";
 }else{
   echo $this->upload->display_errors();
 }
}

То, что сейчас происходит в моем коде, таково. Хотя он загружает 2 одинаковых изображения. Имя файла со «Случайным текстом» не работает.

[Решение] : файл контроллера. Я изменил некоторые строки.

Ссылка: ответ Хавьера ниже

$this->load->library('upload', $config);
if($this->upload->do_upload('file_data')){
 unset($this->upload);
 $this->load->library('upload', $configClone);
 $this->upload->do_upload('file_data');
   echo "Uploaded";
}else{
   echo $this->upload->display_errors();
}

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Удалить эту строку

$this->load->library('upload', $configClone);

Изменить

if($this->upload->do_upload('file_data')){
   $this->upload->initialize($configClone);
   if($this->upload->do_upload('file_data')){
        echo "Uploaded";
   }else{
        echo $this->upload->display_errors();
   }
 }else{
   echo $this->upload->display_errors();
 }

Объяснение: Ответ Хавьера Ларроулета

0 голосов
/ 17 апреля 2020

Загрузка загружаемой библиотеки два раза подряд, даже с разными конфигурационными массивами, ничего не даст. Codeigniter будет игнорировать второй оператор $this->load->library();, если библиотека уже находится в памяти. Это предназначено для предотвращения конфликтов, условий гонки и т. Д. c.

Вам необходимо: -

  1. загрузить первый экземпляр библиотеки
  2. обработать первую загрузку
  3. выгрузить первый экземпляр библиотеки
  4. загрузить второй экземпляр библиотеки
  5. обработать вторую загрузку

Point например, число 3 может быть достигнуто с помощью unset($this->upload); после обработки первой загрузки.

...