CodeIgniter Функция загрузки изображения не работает - PullRequest
0 голосов
/ 26 июня 2018

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

Контроллер

public function create() {
$data['title'] = 'Create Post';
$data['desc'] = 'Feel free to create a new post here.';
$data['categories'] = $this->post_model->get_categories();

$this->form_validation->set_rules('title', 'Post Title', 'required');
$this->form_validation->set_rules('desc', 'Post Description', 'required');

if($this->form_validation->run() == FALSE) {
  $this->load->view('templates/header');
  $this->load->view('posts/create', $data);
  $this->load->view('templates/footer');
} else {
  // Upload Image
  $config['upload_path'] = './assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

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

  if(!$this->upload->do_upload()){
    $errors = array('error' => $this->upload->display_errors());
    $post_image = 'noimage.jpg';
  } else {
    $data = array('upload_data' => $this->upload->data());
    $post_image = $_FILES['userfile']['name'];
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}

}

Модель

public function create_post($post_image) {

$slug = url_title($this->input->post('title'));

$data = array(
  'post_title'  => $this->input->post('title'),
  'post_slug'   => $slug,
  'post_desc'   => $this->input->post('desc'),
  'post_cat_id' => $this->input->post('catid'),
  'post_image'  => $post_image
);

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

}

View

<?php echo form_open_multipart('posts/create'); ?>
<div class="form-group">
  <label>Post Title</label>
  <?php echo form_input(['name'=>'title', 'placeholder'=>'Add Title', 'class'=>'form-control', 'value'=>set_value('title')]); ?>
</div>
<div class="form-group">
  <label>Select Category</label>
  <select name="catid" class="form-control">
    <?php foreach($categories as $category): ?>
      <option value="<?php echo $category['cat_id']; ?>"><?php echo $category['cat_name']; ?></option>
    <?php endforeach; ?>
  </select>
</div>
<div class="form-group">
  <label>Post Description</label>
  <?php echo form_textarea(['name'=>'desc', 'placeholder'=>'Add Description', 'class'=>'form-control', 'value'=>set_value('desc')]); ?>
</div>
<div class="form-group">
  <label>Upload Image</label>
  <input type="file" name="userfile" size="20">
</div>
<input type="submit" class="btn btn-primary" value="Add Post">

Теперь, когда я пытаюсь создать сообщение с изображением, оно выполняет if(!$this->upload->do_upload()){ как ИСТИНА и, таким образом, вставляет noimage.jpg в базу данных, так как изображение тоже не загружается. Любая помощь будет оценена. Спасибо.

EDIT При попытке отладить его с помощью print_r($this->upload->data()); die(); я получил пустой список массивов, что означает, что файл не отправляется из самой формы. Но почему? Я не нахожу ошибок в форме.

Array
(
    [file_name] => 
    [file_type] => 
    [file_path] => ./assets/images/posts/
    [full_path] => ./assets/images/posts/
    [raw_name] => 
    [orig_name] => 
    [client_name] => 
    [file_ext] => 
    [file_size] => 
    [is_image] => 
    [image_width] => 
    [image_height] => 
    [image_type] => 
    [image_size_str] => 
)

и print_r($errors) дают эту ошибку. Думаю, я близок к решению.

Array
(
    [error] => 

The image you are attempting to upload doesn't fit into the allowed dimensions.

)

РЕШЕНИЕ Мне пришлось изменить max_width и max_height на 0 для неограниченного. Изображение не было загружено из-за этой ошибки.

Ответы [ 5 ]

0 голосов
/ 26 июня 2018

попробуйте этот код!

 public function create() {
$data['title'] = 'Create Post';
$data['desc'] = 'Feel free to create a new post here.';
$data['categories'] = $this->post_model->get_categories();

$this->form_validation->set_rules('title', 'Post Title', 'required');
$this->form_validation->set_rules('desc', 'Post Description', 'required');

if($this->form_validation->run() == FALSE) {
  $this->load->view('templates/header');
  $this->load->view('posts/create', $data);
  $this->load->view('templates/footer');
} else {
  // Upload Image
  $config['upload_path'] = './assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

  $this->load->library('upload');
    $this->upload->initialize($config);
    if(!$this->upload->do_upload('userfile'))
    {
    $errors = array('error' => $this->upload->display_errors());
    $post_image = 'noimage.jpg';
  } else {
    $data = array('upload_data' => $this->upload->data());
    $post_image = $_FILES['userfile']['name'];
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}
0 голосов
/ 26 июня 2018

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

if($this->form_validation->run() == FALSE) {
  $this->load->view('templates/header');
  $this->load->view('posts/create', $data);
  $this->load->view('templates/footer');
} else {
  // Upload Image
  $config['upload_path'] = './assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

  $this->load->library('upload', $config);
  $this->upload->initialize($config);
  if(!$this->upload->do_upload('userfile')){
    $errors = array('error' => $this->upload->display_errors());
    $post_image = 'noimage.jpg';
  } else {
    $data = array('upload_data' => $this->upload->data());
    $post_image = $_FILES['userfile']['name'];
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}
0 голосов
/ 26 июня 2018

Если вы считаете, что ваш код правильный. Вы проверили права доступа к папке? Вы должны дать разрешение на папки для хранения изображений

0 голосов
/ 26 июня 2018

попробуйте следующие изменения

$config['upload_path'] = './assets/images/posts'; **to** $config['upload_path'] = getcwd().'/assets/images/posts';
0 голосов
/ 26 июня 2018

Забудьте о загрузке upload Библиотека сделайте так:

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

Весь код (часть загрузки файла) должен выглядеть следующим образом:

else {
  // Upload Image
  $config['upload_path'] = FCPATH.'assets/images/posts';
  $config['allowed_types'] = 'gif|jpg|png';
  $config['max_size'] = 2048;
  $config['max_width'] = 500;
  $config['max_height'] = 500;

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

  if($this->upload->do_upload('userfile'))
  {
    print_r($this->upload->data());die;
    $file_name = $this->upload->data('file_name');
    $post_image = $file_name; 
  } 
  else 
  {
    $errors = array('error' => $this->upload->display_errors());
    print_r($errors);die;
    $post_image = 'noimage.jpg'; 
  }

  $this->post_model->create_post($post_image);
  return redirect('posts');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...