Как загрузить картинку в таблицу в б.д. MySQL?

Есть такой код, загрузка картинки в images/upload А необходимо в базу данных, в таблицу users в ячейку avatar

images.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Images extends CI_Controller {

    private $upload_path = "./uploads";

    public function index()
    {
        $this->load->view("index");
    }

    public function upload()
    {
        if ( ! empty($_FILES)) 
        {
            $config["upload_path"]   = $this->upload_path;
            $config["allowed_types"] = "gif|jpg|png";
            $this->load->library('upload', $config);

            if ( ! $this->upload->do_upload("file")) {
                echo "failed to upload file(s)";
            }
        }
    }

    public function remove()
    {
        $file = $this->input->post("file");
        if ($file && file_exists($this->upload_path . "/" . $file)) {
            unlink($this->upload_path . "/" . $file);
        }
    }

    public function list_files()
    {
        $this->load->helper("file");
        $files = get_filenames($this->upload_path);
        // we need name and size for dropzone mockfile
        foreach ($files as &$file) {
            $file = array(
                'name' => $file,
                'size' => filesize($this->upload_path . "/" . $file)
            );
        }

        header("Content-type: text/json");
        header("Content-type: application/json");
        echo json_encode($files);
    }

}

<script>
    Dropzone.autoDiscover = false;
    var myDropzone = new Dropzone("#my-dropzone", {
        url: "<?php echo site_url("images/upload") ?>",
        acceptedFiles: "image/*",
        addRemoveLinks: true,
        removedfile: function(file) {
            var name = file.name;

            $.ajax({
                type: "post",
                url: "<?php echo site_url("images/remove") ?>",
                data: { file: name },
                dataType: 'html'
            });

            // remove the thumbnail
            var previewElement;
            return (previewElement = file.previewElement) != null ? (previewElement.parentNode.removeChild(file.previewElement)) : (void 0);
        },
        init: function() {
            var me = this;
            $.get("<?php echo site_url("images/list_files") ?>", function(data) {
                // if any files already in server show all here
                if (data.length > 0) {
                    $.each(data, function(key, value) {
                        var mockFile = value;
                        me.emit("addedfile", mockFile);
                        me.emit("thumbnail", mockFile, "<?php echo base_url(); ?>uploads/" + value.name);
                        me.emit("complete", mockFile);
                    });
                }
            });
        }
    });
</script>

Архив с сайтом


Ответы (1 шт):

Автор решения: Tropen

Можно использовать BLOB поле и заполнять его. Англ. стек с подобным вопросом. Но это неправильный путь.

Лучше если загружаемые файлы хранятся в ../public/uploads/, а в БД хранится к ним путь. Если загрузок много, то лучше хранить иерархично uploads/year/month

В будущем возможно использовать хостинг, который будет хранить картинки не на самом сервере, а в облаке, как это делает AWS S3, например.

→ Ссылка