То, что я хочу сделать, это загрузить изображение в мою базу данных sql, используя HTML-форму, а затем извлечь его из базы данных, чтобы отобразить его. Я покажу вам некоторый код, чтобы вы могли понять, что я пытаюсь сделать.
1-е РЕДАКТИРОВАНИЕ: просто связать изображение, чтобы показать таблицу базы данных, в которую я загружаю изображение. Тип строки - blob → https://imgur.com/a/KBlNWWN. В приведенном ниже коде я отредактировал другие строки таблицы БД, но код для них фактически есть.
Это форма загрузки изображения:
<form method="POST" action="/~gd339/ci/index.php/Add/postEvent/<?php echo $societyId ?>" enctype="multipart/form-data">
Event image: <input type="file" name="image"/> <br>
<input type="submit" name="POST" value="Post Event!" class = "unique"/>
Он postEvent
данные на контроллер postEvent
:
public function postEvent($society_id) {
$this->load->model('Events_model');
$image = file_get_contents($_FILES['image']['tmp_name']);
$this->Events_model->addEvent($image);
}
Обратите внимание, что для получения изображения из формы я использую $image = file_get_contents($_FILES['image']['tmp_name']);
данные, полученные с помощью записи, затем отправляются в addEvent
в моей модели:
public function addEvent ($image) {
$image1 = $this->db->escape($image);
$sql = "INSERT INTO events (event_image) VALUES ($image1)";
$query = $this->db->query($sql);
}
Чтобы получить изображение, я использую тег изображения с src
который вызывает функцию в контроллере:
<img src="http://dragon.maple.as.re/~gd339/ci/index.php/add/getEventImage/<?php echo $row['event_id'] ?>">
public function getEventImage($event_id){
$this->load->model('Societies_model');
$image = $this->Societies_model->getEventImage($event_id);
header("Content-type: image/jpeg");
print($image);
}
код для getEventImage
:
public function getEventImage($event_id) {
$data = '';
$sql = "SELECT event_image FROM events WHERE event_id = $event_id";
$query = $this->db->query($sql);
if ($query->num_rows()) {
$data = $query->row_array();
$data = $data['MA_PHOTO'];
$query->free_result();
}
return $data;
}
Это приводит к тому, что изображение просто не появляется. Я читал другие примеры здесь на stackoverflow, и все они, кроме 1, используют библиотеку загрузки CI, чтобы делать то, что я пытаюсь сделать. Является ли библиотека единственным способом получения изображений с помощью CI или в моем коде что-то не так, что изображения не отображаются при вызове?
Большое спасибо тому, кто будет иметь терпение, чтобы просмотреть мой код. Я знаю, что это много, но я впервые использую КИ, поэтому я все еще учусь.
Я сделал аналогичный процесс без использования CI_Upload.
Полезной отладкой является использование инструмента db для сохранения большого двоичного объекта в файл и попытка его отобразить (используя mspaint, средство просмотра изображений и т.д.)
Прежде чем сохранить изображение в базе данных, я использую следующую функцию, чтобы изменить его размер (так как он мне не нужен) и преобразовать (убедиться), что это jpeg.
private function get_image_resized($data){
$data = smart_resize_image (
null,
$data,
250,
0,
true,
'return');
$temp_file = tempnam(sys_get_temp_dir(), 'ImageResize');
imagejpeg($data, $temp_file, 100);
$data = file_get_contents($temp_file);
unlink($temp_file);
return $data;
}
smart_resize_image
можно найти здесь:
Для отображения изображения
function imagem($cd_produto){
$im_produto = $this->produto_model->get_imagem ( $cd_produto );
header ( "Content-type:image/jpeg" );
echo $im_produto;
}
Надеюсь, поможет.
$image = file_get_contents($_FILES['image']['tmp_name']);
по крайней мере используйтеmove_uploaded_file()
илиis_uploaded_file()
.This is useful to help ensure that a malicious user hasn't tried to trick the script into working on files upon which it should not be working
blob
и т. Д. Если это поле не поддерживает двоичные файлы, у вас возникнут некоторые проблемы ...Is the library the only way to retrieve images using CI
- изображения существовали в базах данных задолго до того, как CI имел загрузив библиотеку, я заново сделал сайт, созданный в 2000 году (возможно, в 2009 году), на котором было более 300 ГБ данных изображений в БД (это было не весело), но это был не CI, и изображения работали просто отлично. Лично мне не нравится хранить данные изображения в БД из-за прошлого опыта (как выше). Перенос БД такого размера не очень приятен.