Hvordan laste opp bilde og fil i CodeIgniter (med eksempel)

CodeIgniter-filopplasting

Filbehandling er viktig for de fleste nettapplikasjoner. Hvis du utvikler et innholdsstyringssystem, må du kunne laste opp bilder, word-dokumenter, pdf-rapporter osv. Hvis du jobber med en medlemsside, må du kanskje ta en bestemmelse for at folk kan laste opp profilen sin bilder. CodeIgniters filopplastingsklasse gjør det enkelt for oss å gjøre alt ovenfor.

I denne opplæringen vil vi se på hvordan du bruker filopplastingsbiblioteket til å laste filer.

Laster opp bilder i CodeIgniter

Fil laster opp i CodeIgniter har to hoveddeler. Frontend og backend. Grensesnittet håndteres av HTML-skjemaet som bruker skjemainndatafilen. På baksiden behandler filopplastingsbiblioteket de innsendte inndataene fra skjemaet og skriver det til opplastingskatalogen.

La oss begynne med inndataskjemaet.

Opprett en ny katalog kalt filer i program/visningskatalog

Legg til følgende filer i applikasjon/visninger/filer

  • upload_form.php – denne visningen inneholder HTML-skjemaet som har inndatatypen fil og sender den valgte filen til serveren for behandling
  • upload_result.php – denne visningen viser resultatene av det opplastede bildet, inkludert en lenke som vi kan klikke for å se resultatene.


Legg til følgende kode til 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>

HER,

  • if (isset($error)){...} sjekker om feilvariabelen er satt. Hvis resultatet er sant, vises feilen som returneres av opplastingsbiblioteket til brukeren.
  • typefilen lar brukeren nettlese til datamaskinen sin og velge en fil for opplasting.

Legg til følgende kode til 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>

HER,

  • bruker ankerhjelperen til å lage en lenke til den nye opplastede filen i bildekatalogen. Navnet hentes fra bildemetadataene som sendes til visningen når filen er lastet opp.

La oss nå lage kontrolleren som vil svare på bildeopplastingen vår

Legg til en ny fil ImageUploadController.php i program/kontrollere

Legg til følgende kode til 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);
        }
    }

}

HER,

  • klasse ImageUploadController utvider CI_Controller {...} definerer vår kontrollerklasse og utvider basekontrolleren CI_Controller
  • offentlig funksjon __construct() {...} initialiserer den overordnede konstruktørmetoden og laster inn url- og skjemahjelperne
  • public function index() {...} definerer indeksmetoden som brukes til å vise bildeopplastingsskjemaet
  • public function store() {...} definerer metoden som skal laste opp bildet og lagre det på nettapplikasjonsserveren.
    • $config['upload_path'] = './images/'; setter katalogen der bildene skal lastes opp
    • $config['allowed_types'] = 'gif|jpg|png'; definerer de akseptable filtypene. Dette er viktig av sikkerhetsmessige årsaker. De tillatte typene sikrer at bare bilder lastes opp og andre filtyper som php ikke kan lastes opp fordi de har potensial til å kompromittere serveren.
    • $config['max_size'] = 2000; angi maksimal filstørrelse i kilobyte. I vårt eksempel er den maksimale filen som kan lastes opp 2,000 kb nær 2MB. Hvis brukeren prøver å laste opp en fil som er større enn 2,000 kb, vil bildet mislykkes i å laste opp og biblioteket vil returnere en feilmelding.
    • $config['max_width'] = 1500; angir maksimal bredde på bildet som i vårt tilfelle er 1,500 px. Enhver bredde større enn det resulterer i en feil
    • $config['max_height'] = 1500; definerer maksimal akseptabel høyde.
    • $this->load->library('opplasting', $config); laster opplastingsbiblioteket og initialiserer det med matrisen $config som vi definerte ovenfor.
    • hvis (!$this->upload->do_upload('profile_image')) {...} prøver å laste opp det innsendte bildet som i vårt tilfelle heter profile_image
    • $error = array('error' => $this->upload->display_errors()); angir feilmeldingen hvis opplastingen mislykkes
    • $this->load->view('filer/upload_form', $error); laster filopplastingsskjemaet og viser feilmeldingen som returneres fra opplastingsbiblioteket
    • $data = array('image_metadata' => $this->upload->data()); angir metadata for bildet hvis opplastingen har vært vellykket
    • $this->load->view('filer/opplastingsresultat', $data); laster den opplastede visningen og sender metadataene for den opplastede filen.

Det er det for kontrolleren. La oss nå lage katalogen der bildene våre skal lastes opp til. Opprett en ny katalog "bilder" i rotkatalogen til applikasjonen din

Til slutt vil vi legge ut to ruter til vår routes.php-fil som viser skjemaet og viser resultater

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

HER,

  • $route['upload-image'] = 'bildeopplastingskontroller'; definerer URL-opplastingsbildet som kaller indeksmetoden til ImageUploadController
  • $route['store-image'] = 'bildeopplastingskontroller/butikk'; definerer URL-lagerbildet som godtar den valgte brukerfilen og laster den opp til serveren.

Tester applikasjonen

La oss starte den innebygde PHP-serveren

Åpne terminalen/kommandolinjen og bla til roten av programmet. I mitt tilfelle er roten plassert i stasjonen C:\Sites\ci-app

cd C:\Sites\ci-app

start serveren ved å bruke følgende kommando

php -S localhost:3000

Last inn følgende URL i nettleseren din: http://localhost:3000/upload-image

vil du kunne se følgende resultater

Laster opp bilder i CodeIgniter

Klikk på velg fil

Du bør kunne se et dialogvindu som ligner på følgende

Laster opp bilder i CodeIgniter

Velg ønsket bilde og klikk deretter på åpne

Laster opp bilder i CodeIgniter

Det valgte filnavnet vil vises i skjemaopplastingen som vist på bildet ovenfor. Klikk på knappen for å laste opp bilde

Du vil få følgende resultater forutsatt at alt går bra

Laster opp bilder i CodeIgniter

Klikk på Se mitt bilde! Link

Du skal kunne se bildet du lastet opp. Resultatene vil ligne på følgende

Laster opp bilder i CodeIgniter

Merk at navnet på det opplastede bildet vises i URL-en. Vi fikk bildenavnet fra de opplastede metadataene for bildet

Merk: Filopplastingsprosessen forblir den samme for andre typer filer

Oppsummer dette innlegget med: