Slik laster du opp bilde og fil i CodeTennapparat (med eksempel)

⚡ Smart oppsummering

CodeIgniter File Upload bruker det innebygde opplastingsbiblioteket til å flytte bilder og dokumenter fra et HTML-skjema til en serverkatalog. Dette eksemplet bygger et opplastingsskjema, en kontroller som validerer type og størrelse, og en resultatside som bekrefter opplastingen.

  • 📁 Kjerneklasse: Opplastingsbiblioteket håndterer backend-arbeidet med å validere en innsendt fil og skrive den til den valgte opplastingskatalogen.
  • 🖼️ To deler: En opplasting trenger et HTML-skjema i frontend-format med en inputtypefil pluss en backend-kontroller som behandler innsendingen.
  • 🔒 Skriv hviteliste: allowed_types-konfigurasjonen godtar bare listede filtyper som gif, jpg og png, og blokkerer risikable filer som PHP-skript.
  • 📏 Størrelsesgrenser: Nøklene max_size, max_width og max_height avviser filer som overskrider grensene og returnerer en tydelig feilmelding.
  • 📝 Skjemakoding: Skjemaet må sette enctype til multipart/form-data, ellers når den valgte filen aldri serveren.
  • 📄 Resultatmetadata: Ved vellykket oppstart returnerer upload->data() fildetaljene som ble brukt til å bygge en lenke til det nylig lagrede bildet.
  • 🤖 AI Assist: AI-verktøy kan generere opplastingsskjemaet, kontrollervalideringsregler og feilhåndtering, og deretter gjennomgå dem for sikkerhetshull.

CodeIgniter-filopplasting

CodeIgniter-filopplasting

Filbehandling er viktig for de fleste webapplikasjoner. Hvis du er utviklerping et innholdsstyringssystem, må du kunne laste opp bilder, Word-dokumenter, PDF-rapporter og mer. Hvis du jobber med et medlemsnettsted, må du kanskje legge til rette for at folk kan laste opp profilbildene sine. CodeIgniter File Uploading-klassen gjør det enkelt for oss å gjøre alt det ovennevnte.

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

Laster opp bilder i CodeTenner

Fil laster opp i CodeTenner har to hoveddeler: frontend og backend. Frontend håndteres av HTML-skjemaet som bruker form input-typen fil. På backend behandler filopplastingsbiblioteket den innsendte inputen fra skjemaet og skriver den til opplastingskatalogen.

La oss begynne med inndataskjemaet.

Opprett en ny katalog kalt filer i katalogen application/views.

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 vi kan klikke på 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(0)?>" 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,

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

Legg til følgende kode i 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 å opprette en lenke til den nylig opplastede filen i bildekatalogen. Navnet hentes fra bildemetadataene som sendes til visningen når filen er lastet opp.

La oss nå lage kontrolleren som skal reagere 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 akseptable filtyper. Dette er viktig av sikkerhetsmessige årsaker. De tillatte typene sikrer at bare bilder lastes opp, og andre filtyper som PHP kan ikke lastes opp, fordi de har potensial til å kompromittere serveren.
    • $config['max_size'] = 2000; angir maksimal filstørrelse i kilobyte. I vårt eksempel er den maksimale filen som kan lastes opp 2,000 kb, nærmere 2 MB. Hvis brukeren prøver å laste opp en fil som er større enn 2,000 kb, vil bildet ikke lastes opp, og biblioteket vil returnere en feilmelding.
    • $config['max_width'] = 1500; angir maksimal bredde på bildet, som i vårt tilfelle er 1,500 piksler. Enhver bredde større enn dette 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 var alt for kontrolleren. La oss nå opprette katalogen der bildene våre skal lastes opp. Opprett en ny katalog med navnet «bilder» i rotkatalogen til applikasjonen din.

Til slutt legger vi til to ruter i routes.php-filen vår som viser skjemaet og resultatene.

Åpne application/config/routes.php og legg til følgende ruter

$route['upload-image'] = 'imageuploadcontroller';
$route['store-image'] = 'imageuploadcontroller/store';

HER,

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

Slik fikser du vanlige CodeFeil ved opplasting av Igniter-filer

De fleste opplastingsfeil returnerer en tydelig melding fra opplastingsbiblioteket. Listen nedenfor viser de vanlige feilene og rettelsene.

  • Filtypen du prøver å laste opp er ikke tillatt: legg til den manglende utvidelsen i allowed_types-konfigurasjonen, for eksempel 'gif|jpg|png|pdf'.
  • Filen du prøver å laste opp er større enn den tillatte størrelsen: øk max_size, og bekreft at upload_max_filesize og post_max_size i php.ini er store nok.
  • Opplastingsstien ser ikke ut til å være gyldig: opprett upload_path-katalogen og sørg for at webserveren har skrivetillatelse til den.
  • Du valgte ikke en fil å laste opp: sjekk at inputnavnet samsvarer med do_upload()-argumentet og at skjemaet bruker enctype multipart/form-data.

Tester applikasjonen

La oss starte den innebygde PHP-serveren.

Åpne terminalen eller kommandolinjen og bla til rotmappen til applikasjonen din. I mitt tilfelle ligger rotmappen på stasjon 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

Du vil kunne se følgende resultater

Laster opp bilder i CodeTenner

Klikk på velg fil

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

Laster opp bilder i CodeTenner

Velg ønsket bilde, og klikk deretter på åpne

Laster opp bilder i CodeTenner

Det valgte filnavnet vil vises i opplastingsskjemaet som vist på bildet ovenfor. Klikk på Last opp bilde-knappen.

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

Laster opp bilder i CodeTenner

Klikk på lenken Vis bildet mitt!

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

Laster opp bilder i CodeTenner

Legg merke til at navnet på det opplastede bildet vises i URLVi fikk bildenavnet fra metadataene for det opplastede bildet.

Merk: Filopplastingsprosessen er den samme for andre filtyper.

Spørsmål og svar

Ocuco CodeIgniter 3 Upload-biblioteket håndterer én fil per do_upload()-kall, så du går over $_FILES i en løkke og kaller den for hvert element. CodeIgniter 4 støtter flere opplastinger direkte gjennom getFileMultiple()-metoden.

Nei. CodeIgniter 4 erstatter opplastingsbiblioteket med forespørselsfil-API-et. Du kaller $this->request->getFile('field'), validerer det, og bruker deretter move() for å lagre filen, i stedet for å laste inn et separat opplastingsbibliotek.

Sett $config['encrypt_name'] = TRUE for å gi hver fil et tilfeldig navn, eller sett $config['file_name'] til en verdi du velger. Dette forhindrer at eksisterende filer som deler samme opprinnelige navn overskrives.

Ja. AI kan produsere hvitlisten for allowed_types, størrelsesgrenser og feilhåndtering, og foreslå ekstra kontroller som å verifisere den virkelige MIME-typen. Test alltid de genererte reglene mot virkelige filer før utrulling.

Ja. Lim inn feilmeldingen og kontrolleren din, så kan AI finne problemer som et manglende flerdelt skjema, en ikke-skrivbar upload_path eller en utvidelse som mangler fra allowed_types, og deretter foreslå en løsning.

Oppsummer dette innlegget med: