CodeIgniter'a Resim ve Dosya Nasıl Yüklenir (Örnek ile)

CodeIgniter Dosya Yükleme

Dosya yönetimi çoğu web uygulaması için gereklidir. İçerik yönetim sistemi geliştiriyorsanız görsel, word belgesi, pdf raporu vb. yükleyebilmeniz gerekecektir. Üyelik sitesi üzerinde çalışıyorsanız kişilerin profillerini yüklemeleri için bir provizyon almanız gerekebilir. Görüntüler. CodeIgniter'ın Dosya Yükleme sınıfı yukarıdakilerin tümünü yapmamızı kolaylaştırır.

Bu eğitimde, dosyaları yüklemek için dosya yükleme kitaplığının nasıl kullanılacağına bakacağız.

CodeIgniter'a Görüntü Yükleme

Dosya yükleme CodeIgniter iki ana bölümü vardır. Ön uç ve arka uç. Ön uç, form giriş türü dosyasını kullanan HTML formu tarafından işlenir. Arka uçta, dosya yükleme kitaplığı formdan gönderilen girişi işler ve bunu yükleme dizinine yazar.

Giriş formuyla başlayalım.

Uygulama/görünümler dizininde dosyalar adı verilen yeni bir dizin oluşturun

Aşağıdaki dosyaları application/views/files'a ekleyin

  • upload_form.php – bu görünüm, dosyanın giriş türünü içeren ve seçilen dosyayı işlenmek üzere sunucuya gönderen HTML formunu içerir
  • upload_result.php – bu görünüm, yüklenen görselin sonuçlarını, sonuçları görüntülemek için tıklayabileceğimiz bir bağlantı da dahil olmak üzere görüntüler.


Aşağıdaki kodu upload_form.php'ye ekleyin

<!DOCTYPE html>
<html>
<head>
    <title>CodeIgniter Image Upload</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <div>
        <h3>Select an image from your computer and upload it to the cloud</h3>
        <?php
                if (isset($error)){
                    echo $error;
                }
            ?>
            <form method="post" action="<?=base_url('store-image')?>" enctype="multipart/form-data">
                <input type="file" id="profile_image" name="profile_image" size="33" />
                <input type="submit" value="Upload Image" />
            </form>
    </div>
</body>
</html>

İŞTE,

  • if (isset($error)){…}, hata değişkeninin ayarlanıp ayarlanmadığını kontrol eder. Sonuç doğruysa, yükleme kitaplığının döndürdüğü hata kullanıcıya görüntülenir.
  • tür dosyası, kullanıcının bilgisayarına göz atmasına ve yüklemek için bir dosya seçmesine olanak tanır.

Aşağıdaki kodu upload_result.php'ye ekleyin

<!DOCTYPE html>
<html>
<head>
    <title>Image Upload Results</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <div>
        <h3>Congratulations, the image has successfully been uploaded</h3>
        <p>Click here to view the image you just uploaded
            <?=anchor('images/'.$image_metadata['file_name'], 'View My Image!')?>
        </p>

        <p>
            <?php echo anchor('upload-image', 'Go back to Image Upload'); ?>
        </p>
    </div>
</body>
</html>

İŞTE,

  • görüntüler dizinine yeni yüklenen dosyaya bir bağlantı oluşturmak için bağlantı yardımcısını kullanır. Ad, dosya başarıyla yüklendiğinde görünüme iletilen görüntü meta verisinden alınır.

Şimdi resim yüklememize cevap verecek kontrolcüsü oluşturalım.

Application/controllers'a yeni bir ImageUploadController.php dosyası ekleyin

Aşağıdaki kodu ImageUploadController.php'ye ekleyin

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class ImageUploadController extends CI_Controller {

    public function __construct() {
        parent::__construct();
        $this->load->helper('url', 'form');
    }

    public function index() {
        $this->load->view('files/upload_form');
    }

    public function store() {
        $config['upload_path'] = './images/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = 2000;
        $config['max_width'] = 1500;
        $config['max_height'] = 1500;

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

        if (!$this->upload->do_upload('profile_image')) {
            $error = array('error' => $this->upload->display_errors());

            $this->load->view('files/upload_form', $error);
        } else {
            $data = array('image_metadata' => $this->upload->data());

            $this->load->view('files/upload_result', $data);
        }
    }

}

İŞTE,

  • ImageUploadController sınıfı CI_Controller'ı genişletir {…} denetleyici sınıfımızı tanımlar ve CI_Controller temel denetleyicisini genişletir
  • public function __construct() {…} ana yapıcı yöntemini başlatır ve url'yi ve form yardımcılarını yükler
  • public function index() {…}, resim yükleme formunu görüntülemek için kullanılan indeks yöntemini tanımlar
  • public function store() {…}, görüntüyü yükleyecek ve web uygulama sunucusunda saklayacak yöntemi tanımlar.
    • $config['upload_path'] = './images/'; görüntülerin yükleneceği dizini ayarlar
    • $config['allowed_types'] = 'gif|jpg|png'; kabul edilebilir dosya uzantılarını tanımlar. Bu güvenlik nedeniyle önemlidir. İzin verilen türler, yalnızca görsellerin yüklenmesini ve php gibi diğer dosya türlerinin sunucuyu tehlikeye atma potansiyeline sahip olması nedeniyle yüklenememesini sağlar.
    • $config['max_size'] = 2000; maksimum dosya boyutunu kilobayt cinsinden ayarlayın. Örneğimizde yüklenebilecek maksimum dosya 2,000kb, yani 2MB'tır. Kullanıcı 2,000 kb'den büyük bir dosyayı yüklemeye çalışırsa görsel yüklenemeyecektir ve kitaplık bir hata mesajı döndürecektir.
    • $config['max_width'] = 1500; bizim durumumuzda 1,500 piksel olan görüntünün maksimum genişliğini ayarlar. Bundan daha büyük herhangi bir genişlik hatayla sonuçlanır
    • $config['max_height'] = 1500; kabul edilebilir maksimum yüksekliği tanımlar.
    • $this->load->library('yükleme', $yapılandırma); yükleme kütüphanesini yükler ve onu yukarıda tanımladığımız $config dizisiyle başlatır.
    • if (!$this->upload->do_upload('profile_image')) {…}, bizim durumumuzda profile_image olarak adlandırılan gönderilen resmi yüklemeye çalışırsa
    • $hata = dizi('hata' => $this->upload->display_errors()); yükleme başarısız olursa hata mesajını ayarlar
    • $this->load->view('dosyalar/upload_form', $hata); dosya yükleme formunu yükler ve yükleme kitaplığından döndürülen hata mesajını görüntüler
    • $veri = array('image_metadata' => $this->upload->data()); yükleme başarılıysa görsel meta verilerini ayarlar
    • $this->load->view('dosyalar/upload_result', $veri); yüklenen başarıyla görünümü yükler ve yüklenen dosya meta verilerini iletir.

Kontrolör için bu kadar. Şimdi görsellerimizin yükleneceği dizini oluşturalım. Uygulamanızın kök dizininde yeni bir “images” dizini oluşturun

Son olarak, Routes.php dosyamıza formu görüntüleyecek ve sonuçları görüntüleyecek iki rota ekleyeceğiz.

Open application/config/routes.php
Add the following routes
$route['upload-image'] = 'imageuploadcontroller';
$route['store-image'] = 'imageuploadcontroller/store';

İŞTE,

  • $route['upload-image'] = 'imageuploadcontroller'; ImageUploadController'ın indeks yöntemini çağıran URL yükleme görüntüsünü tanımlar
  • $route['store-image'] = 'imageuploadcontroller/store'; seçilen kullanıcı dosyasını kabul eden ve sunucuya yükleyen URL mağaza görüntüsünü tanımlar.

Uygulamayı test etme

Yerleşik PHP sunucusunu başlatalım

Terminal/komut satırını açın ve uygulamanızın köküne göz atın. Benim durumumda kök C:\Sites\ci-app sürücüsünde bulunuyor

cd C:\Sites\ci-app

Aşağıdaki komutu kullanarak sunucuyu başlatın

php -S localhost:3000

Aşağıdaki URL'yi web tarayıcınıza yükleyin: http://localhost:3000/upload-image

Aşağıdaki sonuçları görebileceksiniz

CodeIgniter'a Görüntü Yükleme

Dosya seç'e tıklayın

Aşağıdakine benzer bir iletişim penceresi görebilmeniz gerekir

CodeIgniter'a Görüntü Yükleme

İstediğiniz görseli seçin ve aç'a tıklayın

CodeIgniter'a Görüntü Yükleme

Seçilen dosya adı, yukarıdaki resimde gösterildiği gibi form yüklemesinde görünecektir. Bir resim yükle düğmesine tıklayın

Her şeyin yolunda gittiğini varsayarsak aşağıdaki sonuçları elde edeceksiniz

CodeIgniter'a Görüntü Yükleme

Resmimi Görüntüle'ye tıklayın! Bağlantı

Yüklediğiniz resmi görebilmeniz gerekir. Sonuçlar aşağıdakine benzer olacaktır

CodeIgniter'a Görüntü Yükleme

Yüklenen görselin adının URL'de görüntülendiğine dikkat edin. Resim adını, yüklenen resim meta verisinden aldık

Not: Dosya Yükleme işlemi diğer dosya türleri için aynı kalır