如何将文件图像存储到 mysql (Codeigniter)

Posted

技术标签:

【中文标题】如何将文件图像存储到 mysql (Codeigniter)【英文标题】:How to store file images into mysql (Codeigniter) 【发布时间】:2017-06-19 07:43:47 【问题描述】:

我尝试使用 Codeigniter 将文件图像上传到 mysql

这可能是我的上传视图:

<label>Upload File</label>
    <input type="file" class="form-control" name="images">
</div>

我已经完成了图像名称、描述等。

我尝试将它保存到数据库中,就像普通的输入表单一样。

结果,“图像”列不能为空。我用 varbinary(3000) 设置了“图像”列

我做错了吗?

已编辑:

我的控制器:

public function save()
    $this->gallery_model->save_foto();
    $this->session->set_flashdata('msg','FOTO BERHASIL DI UPLOAD');
    redirect(base_url('gallery'));

我的模特

<?php
class Gallery_model extends CI_Model 
      public function __construct() 
        parent::__construct();
      

  public function save_foto()
    $data['id']            = date('U');
    $data['nm_foto']       = $this->input->post('nm_foto');
    $data['username']      = $this->input->post('username');
    $data['tanggal']       = date('j F Y');
    $data['images']        = $this->input->post('images');
    $data['deskripsi']     = $this->input->post('deskripsi');
    $this->db->insert( 'gallery', $data );
  

【问题讨论】:

将图像保存到数据库中不是一个好主意..尝试将图像上传到服务器上,然后将文件路径保存到数据库中 能否请您也分享一下您的控制器和型号代码? 图片上传就像其他文件上传一样。你唯一能做的就是将允许的扩展名设置为.jpeg、.jpg、.png等并将路径保存在数据库中 您不会将输入类型文件的数据获取到 post 方法中 我无法使用 Codeigniter 方式进行上传。总是遇到上传路径错误的事情。所以我尝试了这个。我可以用我的教师代码将它保存到我的文件夹中,但你知道,我试图制作一个艺术网站,所以我认为它需要数据库? 【参考方案1】:

不能直接上传图片到数据库,插入图片路径

对于上传图片表单表单添加

enctype="multipart/form-data" 

形式。

有关在 codeigniter 中上传图片的更多帮助

Codeigniter Image Upload

【讨论】:

【参考方案2】:

您可以存储图像,但不建议这样做。

“正确”的做法是将文件存储在服务器上的某个位置,并将 URI 存储在数据库中。

问题是图像可能非常大,这可能会导致数据库负载过大,这是不必要的。当您处理较大规模的项目时,您可能需要同步多个数据库,当您的数据库较大时,您需要不必要地降低网络速度。

如果您仍希望将图像存储在数据库中,可以将其存储为BLOB 类型。见MySQL documenation

然后您可以使用以下示例代码插入它

$data['image'] = file_get_contents($_FILES['image']['tmp_name']);

【讨论】:

【参考方案3】:

如果有人像我一样遇到错误并感到疲倦,这是您可以将 [图片] 上传到资产文件夹的简单方法和代码

在控制器中

public function upd_gallery()
    $file = $this->input->post('img_name').".jpg";
    move_uploaded_file($_FILES['images']['tmp_name'], './wheretosave/etc/etc'.$file);
    redirect( base_url().'gallery');

设置应用程序->配置->路由

$route['gallery/upload2'] = 'gallery/upd_gallery';

把它放在你的视野中

<?php
    $ff = './where-to-save/etc/'.$this->input->post('img_name').'.jpg';
?>
     <form  action="<?= base_url()?>gallery/upload2" method="post" enctype="multipart/form-data">
       <div class="form-group">
          <input type="text" class="form-control" name="img_name" required="required">
       </div>
       <div class="form-group">
          <input type="file" class="form-control" name="images">
       </div>
       <div class="form-group">
          <button type="submit" class="btn btn-common" value="Update"> Upload</button>
       </div>
     </div>
  </div>

当然,这种方式非常简单。你只需要命名你的图像并保存它

【讨论】:

【参考方案4】:

在数据库中保存图像不是好的做法。您可以使用以下代码将文件存储在服务器的文件系统上。

$userfile= $this->input->post('userfile'); //gets image name only

if ($_FILES['userfile']['name'] != '')  //to check if you've selected any file 
    $path = './path/to/folder';
    $config['overwrite'] = FALSE;
    $config['encrypt_name'] = FALSE;
    $config['remove_spaces'] = TRUE;
    $config['upload_path'] = $path;
    $config['allowed_types'] = 'jpg|png|gif|jpeg';
    $config['max_size'] = '0';

    if (!is_dir($config['upload_path'])) 
    die("THE UPLOAD DIRECTORY DOES NOT EXIST");

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

    if (!$this->upload->do_upload('userfile')) 
        return "UPLOAD ERROR ! " . $this->upload->display_errors();
    
    else 
        $filepath = $this->upload->data();
        $doc_path = $filepath['file_name'];
        return $doc_path;
    


【讨论】:

以上是关于如何将文件图像存储到 mysql (Codeigniter)的主要内容,如果未能解决你的问题,请参考以下文章

考虑到我的图像的链接存储在 MySQL 数据库中,如何通过 php 显示存储在文件夹中的图像

如何使用 JavaScript 和 Node.js 将捕获的图像存储到 MySQL 数据库中

如何在 iOS 中使用 PHP MySql 将图像存储在数据库中

如何使用 PHP 从 MySQL 数据库中存储和检索图像?

使用 C++ Boost 或 STL 和 Mysql 存储和检索图像

将图像上传到服务器并将带有文本值的路径存储到MySQL中