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: