Путь к уменьшенному изображению Codeigniter не может быть сохранен в MySql

Я пытаюсь сделать простое приложение с Codeigniter, где мне нужно сохранить путь к уменьшенному изображению в базе данных MySql. Изображения вместе с версиями уменьшенных изображений правильно загружаются в папку загрузки, и я могу сохранять путь к изображениям в своей базе данных во время загрузки, но я не могу сохранить путь к уменьшенным изображениям в базе данных. Я попробовал это в контроллере:

$thumbnail= $this->resize($data['upload_data']['full_path'], $data['upload_data']  ['file_name']);
$thumbnail_path = './uploads/'. $thumbnail;
$newRow = array(
"title" => $this->input->post('title'),
"img_path" => $imgpath,
"thumbnail_path" => $thumbnail_path,
"post_body" => $this->input->post('post_body')
)

Но он хранит только «./uploads/» в столбце thumbnail_path в моей таблице, а не фактический путь к миниатюре. Где я ожидаю, что он будет хранить что-то вроде «./uploads/Lighthouse_thumb.jpg». Я не могу понять, как получить путь к уменьшенным изображениям, чтобы сохранить их в базе данных. Вот мой полный контроллер загрузки:

  class Upload extends CI_Controller
{

function __construct()
{
parent::__construct();
$this->load->helper('form');
}
function index() {

$this->load->view('upload_form', array('error'=>''));
}

function do_upload() {
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '1000';
$config['max_width']  = '1024';
$config['max_height']  = '768';

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

if (!$this->upload->do_upload()) {
$error = array('error' => $this->upload->display_errors());
$this->load->view('upload_form', $error);
} else {
$image_data = $this->upload->data();
$imgpath = './uploads/' . $image_data['file_name'];
$data = array('upload_data'=>$this->upload->data());
$thumbnail= $this->resize($data['upload_data']['full_path'], $data['upload_data']['file_name']);
$thumbnail_path = './uploads/'. $thumbnail;
$newRow = array(
"title" => $this->input->post('title'),
"img_path" => $imgpath,
"thumbnail_path" => $thumbnail_path,
"post_body" => $this->input->post('post_body')
);
$this->load->model('postimage_path');
$this->postimage_path->insert($newRow);
$this->load->view('upload_success', $data);
}

}
function resize($path, $file) {
$config['image_library'] = 'gd2';
$config['source_image'] =  $path;
$config['create_thumb'] = TRUE;
$config['maintian_ratio'] = TRUE;
$config['width'] = 100;
$config['height'] = 100;
$config['new_image'] = './uploads/' . $file;

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

}

}

4

Решение

$thumbnail_path = './uploads/'. $thumbnail;

Так thumbnail_path содержит только «./uploads/»: это говорит нам о том, что $thumbnail имеет значение false (или ноль, или пустая строка и т. д.), что означает, что возвращаемое значение вызова resize является неправильным — кажется, вы ожидаете, что оно вернет имя файла.

function resize($path, $file) {
$config['image_library'] = 'gd2';
$config['source_image'] =  $path;
$config['create_thumb'] = TRUE;
$config['maintian_ratio'] = TRUE;
$config['width'] = 100;
$config['height'] = 100;
$config['new_image'] = './uploads/' . $file;

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

}

resize ничего не возвращает! И вы назначаете это ничего $thumbnail_path, Это твоя проблема.

Вы, кажется, просто скопировали код из CodeIgniter документы. Из упомянутых документов (выделение мое):

Приведенный выше код сообщает функции image_resize найти изображение mypic.jpg, расположенное в папке source_image, а затем создать миниатюру размером 75 x 50 пикселей с использованием GD2 image_library. Поскольку опция keep_ratio включена, большой палец будет максимально приближен к ширине и высоте цели при сохранении исходного соотношения сторон. Миниатюра будет называться mypic_thumb.jpg

Так что у вас есть это! Если ваше имя файла $data['upload_data']['file_name'], ваш эскиз будет $data['upload_data']['file_name'] . "_thumb", Посмотрите на вашу файловую систему, файлы должны быть там, чтобы вы могли видеть.

Итак, чтобы исправить вашу проблему, это должно сделать свое дело:

 $pathinfo = pathinfo($data['upload_data']['file_name']);
$thumbnail_path = './uploads/'. $data['upload_data']['file_name'] . "_thumb" . $pathinfo['extension'];
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]