Загрузка изображения Codeigniter будет загружать только в один каталог - PullRequest
2 голосов
/ 24 декабря 2010
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, она не будет загружаться в папку "company" ... Есть ли причина, по которой она должнатак?!Я в недоумении здесь ... Эта функция работает, когда она переходит в папку аватара, но не если она идет в папку компании ...

Ответы [ 5 ]

7 голосов
/ 24 декабря 2010

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

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

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

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

2 голосов
/ 27 декабря 2010

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

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

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

Из инструкции по CI ...

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

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

2 голосов
/ 25 декабря 2010

Я думаю, что все предложения действительно хороши, вы также можете убедиться, что вы публикуете правильные данные в форме: $ 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>

удачи!

0 голосов
/ 20 октября 2018
 $config = array(
    'upload_path'   './assets/upload/profilepic/',
    'allowed_types' => 'JPG|JPEG|PNG',
    'overwrite' => TRUE,
    'file_name'  => date('YmdHis').''.rand(0,9999)
); 

это не работает для файлов формата JPEG, также я написал маленьким, но это не работает.Пожалуйста, поделитесь, если у вас есть файлы JPEG, которые не загружаются. Другие файлы вставляются легко.

0 голосов
/ 25 декабря 2010

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

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