如何使用CodeIgniter PHP框架以MVC格式实现图片存入MySQL数据库?
用CodeIgniter实现图片存入MySQL数据库(MVC模式)
1. 先建数据库表
首先在MySQL里创建存储图片的表,用LONGBLOB类型存图片二进制数据,同时记录文件名:
CREATE TABLE images ( id INT AUTO_INCREMENT PRIMARY KEY, image_name VARCHAR(255) NOT NULL, image_data LONGBLOB NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
2. 编写模型(Model)
在application/models/下创建Image_model.php,负责数据库的增查操作:
<?php class Image_model extends CI_Model { public function __construct() { parent::__construct(); $this->load->database(); } // 插入图片到数据库 public function insert_image($data) { return $this->db->insert('images', $data); } // 根据ID获取图片 public function get_image($id) { $query = $this->db->get_where('images', ['id' => $id]); return $query->row(); } }
3. 编写控制器(Controller)
在application/controllers/下创建Image_controller.php,处理上传请求、视图渲染和图片输出:
<?php class Image_controller extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('Image_model'); $this->load->library('upload'); } // 显示上传表单 public function upload_form() { $this->load->view('upload_form'); } // 处理图片上传并存入数据库 public function upload_image() { // 配置上传规则 $config['upload_path'] = './uploads/'; // 临时存储路径,可自定义 $config['allowed_types'] = 'gif|jpg|png|jpeg'; $config['max_size'] = 2048; // 2MB限制 $this->upload->initialize($config); if (!$this->upload->do_upload('image')) { // 上传失败,返回错误信息 $data['error'] = $this->upload->display_errors(); $this->load->view('upload_form', $data); } else { // 上传成功,读取文件内容 $upload_data = $this->upload->data(); $image_file = fopen($upload_data['full_path'], 'r'); $image_data = fread($image_file, filesize($upload_data['full_path'])); $image_data = $this->db->escape_str($image_data); fclose($image_file); // 准备插入数据库的数据 $insert_data = [ 'image_name' => $upload_data['file_name'], 'image_data' => $image_data ]; // 调用模型插入 if ($this->Image_model->insert_image($insert_data)) { // 插入成功,跳转到显示页面(这里示例直接返回成功提示) echo "图片已成功存入数据库!<br><a href='" . base_url('image_controller/upload_form') . "'>继续上传</a>"; // 可选:删除临时文件 unlink($upload_data['full_path']); } else { echo "存入数据库失败,请重试!"; } } } // 根据ID输出图片 public function get_image($id) { $image = $this->Image_model->get_image($id); if ($image) { // 根据图片后缀设置Content-Type $ext = pathinfo($image->image_name, PATHINFO_EXTENSION); $mime_type = match($ext) { 'jpg', 'jpeg' => 'image/jpeg', 'png' => 'image/png', 'gif' => 'image/gif', default => 'image/jpeg' }; header("Content-Type: $mime_type"); echo $image->image_data; } else { show_404(); } } }
4. 编写视图(View)
在application/views/下创建upload_form.php,提供上传表单和图片展示示例:
<!DOCTYPE html> <html> <head> <title>图片上传到数据库</title> </head> <body> <h2>上传图片</h2> <?php if(isset($error)) echo "<p style='color:red'>$error</p>"; ?> <form method="post" action="<?php echo base_url('image_controller/upload_image'); ?>" enctype="multipart/form-data"> <input type="file" name="image" required> <br><br> <input type="submit" value="上传并保存到数据库"> </form> <h3>已保存的图片示例(假设ID为1)</h3> <img src="<?php echo base_url('image_controller/get_image/1'); ?>" alt="示例图片" style="max-width:400px;"> </body> </html>
注意事项
- 确保
./uploads/目录存在且有读写权限(如果用临时存储的话) - CodeIgniter的
base_url需要在application/config/config.php中正确配置 - 若图片较大,需调整MySQL的
max_allowed_packet参数,避免插入失败
内容的提问来源于stack exchange,提问作者Renishali Batada
相关产品推荐
相关产品推荐

