Hur man laddar upp bild och fil i CodeIgniter (med exempel)

CodeIgniter-filuppladdning

Filhantering är avgörande för de flesta webbapplikationer. Om du utvecklar ett innehållshanteringssystem måste du kunna ladda upp bilder, word-dokument, pdf-rapporter etc. Om du arbetar på en medlemswebbplats kan du behöva ta en bestämmelse så att folk kan ladda upp sin profil bilder. CodeIgniters filuppladdningsklass gör det enkelt för oss att göra allt ovanstående.

I den här handledningen kommer vi att titta på hur du använder filuppladdningsbiblioteket för att ladda filer.

Ladda upp bilder i CodeIgniter

Fil laddas upp i CodeIgniter har två huvuddelar. Frontend och backend. Gränssnittet hanteras av HTML-formuläret som använder formulärinmatningsfilen. På backend bearbetar filuppladdningsbiblioteket den inskickade inmatningen från formuläret och skriver den till uppladdningskatalogen.

Låt oss börja med inmatningsformuläret.

Skapa en ny katalog som heter filer i program-/vykatalogen

Lägg till följande filer i program/vyer/filer

  • upload_form.php – den här vyn innehåller HTML-formuläret som har indatatypen av fil och skickar den valda filen till servern för bearbetning
  • upload_result.php – den här vyn visar resultaten av den uppladdade bilden inklusive en länk som vi kan klicka på för att se resultaten.


Lägg till följande kod till upload_form.php

<!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>

HÄR,

  • if (isset($error)){...} kontrollerar om felvariabeln har ställts in. Om resultatet är sant visas felet som returneras av uppladdningsbiblioteket för användaren.
  • typfilen låter användaren bläddra till sin dator och välja en fil för uppladdning.

Lägg till följande kod till upload_result.php

<!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>

HÄR,

  • använder ankarhjälpen för att skapa en länk till den nya uppladdade filen i bildkatalogen. Namnet hämtas från bildmetadata som skickas till vyn när filen har laddats upp.

Låt oss nu skapa kontrollern som kommer att svara på vår bilduppladdning

Lägg till en ny fil ImageUploadController.php i program/kontroller

Lägg till följande kod till ImageUploadController.php

<?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);
        }
    }

}

HÄR,

  • class ImageUploadController utökar CI_Controller {...} definierar vår styrenhetsklass och utökar basstyrenheten CI_Controller
  • public funktion __construct() {...} initierar den överordnade konstruktormetoden och laddar webbadressen och formulärhjälparna
  • public function index() {...} definierar indexmetoden som används för att visa bilduppladdningsformuläret
  • public function store() {...} definierar metoden som laddar upp bilden och lagrar den på webbapplikationsservern.
    • $config['upload_path'] = './images/'; ställer in katalogen där bilderna ska laddas upp
    • $config['allowed_types'] = 'gif|jpg|png'; definierar acceptabla filtillägg. Detta är viktigt av säkerhetsskäl. De tillåtna typerna säkerställer att endast bilder laddas upp och andra filtyper som php inte kan laddas upp eftersom de har potential att äventyra servern.
    • $config['max_size'] = 2000; ställ in den maximala filstorleken i kilobyte. I vårt exempel är den maximala filen som kan laddas upp 2,000 2 kb nära 2,000 MB. Om användaren försöker ladda upp en fil som är större än XNUMX XNUMX kb kommer bilden inte att laddas upp och biblioteket returnerar ett felmeddelande.
    • $config['max_width'] = 1500; ställer in bildens maximala bredd som i vårt fall är 1,500 XNUMX px. Varje bredd som är större än så resulterar i ett fel
    • $config['max_height'] = 1500; definierar den maximala acceptabla höjden.
    • $this->load->library('uppladdning', $config); laddar uppladdningsbiblioteket och initierar det med arrayen $config som vi definierade ovan.
    • om (!$this->upload->do_upload('profile_image')) {...} försöker ladda upp den inskickade bilden som i vårt fall heter profile_image
    • $error = array('error' => $this->upload->display_errors()); ställer in felmeddelandet om uppladdningen misslyckas
    • $this->load->view('filer/uppladdningsformulär', $error); laddar filuppladdningsformuläret och visar felmeddelandet som returneras från uppladdningsbiblioteket
    • $data = array('image_metadata' => $this->upload->data()); ställer in bildens metadata om uppladdningen har lyckats
    • $this->load->view('filer/uppladdningsresultat', $data); laddar den uppladdade vyn och skickar den uppladdade filens metadata.

Det är det för kontrollanten. Låt oss nu skapa katalogen dit våra bilder kommer att laddas upp till. Skapa en ny katalog "bilder" i din applikations rotkatalog

Slutligen kommer vi att annonsera två rutter till vår routes.php-fil som visar formuläret och visar resultat

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

HÄR,

  • $route['upload-image'] = 'bilduppladdningskontroller'; definierar URL-uppladdningsbilden som anropar indexmetoden för ImageUploadController
  • $route['store-image'] = 'imageuploadcontroller/butik'; definierar URL-butiksbilden som accepterar den valda användarfilen och laddar upp den till servern.

Testar applikationen

Låt oss starta den inbyggda PHP-servern

Öppna terminalen/kommandoraden och bläddra till roten av din applikation. I mitt fall finns roten i enhet C:\Sites\ci-app

cd C:\Sites\ci-app

starta servern med följande kommando

php -S localhost:3000

Ladda följande URL i din webbläsare: http://localhost:3000/upload-image

du kommer att kunna se följande resultat

Ladda upp bilder i CodeIgniter

Klicka på välj fil

Du bör kunna se ett dialogfönster som liknar följande

Ladda upp bilder i CodeIgniter

Välj önskad bild och klicka sedan på öppna

Ladda upp bilder i CodeIgniter

Det valda filnamnet kommer att visas i formuläruppladdningen som visas i bilden ovan. Klicka på knappen för att ladda upp bild

Du kommer att få följande resultat förutsatt att allt går bra

Ladda upp bilder i CodeIgniter

Klicka på Visa min bild! Länk

Du bör kunna se bilden du laddade upp. Resultaten kommer att likna följande

Ladda upp bilder i CodeIgniter

Observera att den uppladdade bildens namn visas i URL:en. Vi fick bildnamnet från den uppladdade bildens metadata

Obs: Filöverföringsprocessen förblir densamma för andra typer av filer