Я пытаюсь сделать простое приложение с 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();
}
}
$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'];
Других решений пока нет …