Загрузка изображения Codeigniter будет загружаться только в один каталог

function upload($path){ $config['overwrite'] = TRUE; $config['allowed_types'] = 'jpg|jpeg|gif|png'; $config['max_size'] = 2000; if($path =='profile'){ $config['upload_path'] = '../assets/uploads/avatars'; $config['file_name'] = $this->id; } if($path =='company'){ $config['upload_path'] = '../assets/uploads/company'; $config['file_name'] = $this->id.'_company'; } $this->load->library('upload', $config); $this->upload->do_upload(); $image_data = $this->upload->data(); if($path == 'profile'){ $this->db->update('be_user_profiles',array('avatar' => $image_data['file_name']), array('user_id' => $this->id)); } if($path == 'company'){ $this->db->update('be_user_profiles',array('company_logo' => $image_data['file_name']), array('user_id' => $this->id)); } $config = array( 'source_image' => $image_data['full_path'], 'new_image' => $this->upload_path, 'maintain_ratio' => true, 'width' => 500, 'height' => 500 ); $this->load->library('image_lib', $config); $this->image_lib->resize(); } 

Это моя функция загрузки, и она отлично работает, когда $path = 'profile' , но когда она является company , она не будет загружаться в папку «компания» … Есть ли причина, по которой это должно быть так ?! Здесь я не понимаю … Эта функция работает, когда она идет в папку аватара, но не если она идет в папку компании …

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

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

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

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

Я думаю, что все предложения действительно хороши, вы также можете убедиться, что вы публикуете правильные данные в своей форме: $ this-> upload-> do_upload (); по умолчанию ожидает, что имя формы будет «userfile»,

также иногда я нахожу, что иногда полезно показывать некоторые ошибки … поэтому вместо просто $this->upload->do_upload(); попробуйте что-нибудь вроде

 if (!$this->upload->do_upload($userfile)) { $error = array('error' => $this->upload->display_errors()); $this->load->view('upload_error', $error); } 

а затем добавьте файл в ваши представления, называемый upload_error.php, со следующим кодом:

 <html> <head> <title>Upload Form</title> </head> <body> <?php echo $error;?> </body> </html> 

удачи!

Попробуйте отключить конфигурацию перед установкой другой конфигурации, подобной этой. Следующий код отключает конфигурацию и очищает библиотеку изображений.

Вам нужно очистить свою библиотеку.

 //Unset config for the next one unset($config); $this->image_lib->clear(); с //Unset config for the next one unset($config); $this->image_lib->clear(); 

Из руководства CI …

$ this-> image_lib-> ясно ()

Функция clear сбросит все значения, используемые при обработке изображения. Вы хотите называть это, если вы обрабатываете изображения в цикле.

Хм, вот два предложения:

  1. Убедитесь, что папка вашей company доступна для записи
  2. Какой $this->id возвращается? если он возвращает имя файла с расширением, это приводит к сбою процесса загрузки, потому что тогда у вас будет имя файла my_image.png_company который не является допустимым типом.
    Дополнительную информацию см. На странице документации .