Jak nahrát obrázek a soubor do CodeZapalovač (s příkladem)
⚡ Chytré shrnutí
CodeIgniter File Upload používá vestavěnou knihovnu Upload k přesunu obrázků a dokumentů z HTML formuláře do adresáře serveru. Tento příklad vytvoří formulář pro upload, kontroler, který ověřuje typ a velikost, a stránku s výsledky potvrzujícími upload.

CodeNahrávání souboru zapalovače
Správa souborů je nezbytná pro většinu webových aplikací. Pokud jste vývojářping systém pro správu obsahu, budete muset být schopni nahrávat obrázky, dokumenty Word, zprávy ve formátu PDF a další. Pokud pracujete na členském webu, možná budete muset zajistit, aby lidé mohli nahrávat své profilové obrázky. CodeTřída Igniter File Uploading nám usnadňuje všechny výše uvedené činnosti.
V tomto tutoriálu se podíváme na to, jak používat knihovnu pro nahrávání souborů k načítání souborů.
Nahrávání obrázků do CodeZapalovač
Nahrávání souboru do CodeZapalovač má dvě hlavní části: frontend a backend. Frontend je spravován HTML formulářem, který používá vstupní typ formuláře soubor. Na backendu knihovna pro nahrávání souborů zpracovává odeslaný vstup z formuláře a zapisuje jej do adresáře pro nahrávání.
Začněme se vstupním formulářem.
V adresáři application/views vytvořte nový adresář s názvem files.
Přidejte následující soubory do application/views/files
- upload_form.php – toto zobrazení obsahuje HTML formulář, který má vstupní typ souboru a odešle vybraný soubor na server ke zpracování
- upload_result.php – tento pohled zobrazuje výsledky nahraného obrázku, včetně odkazu, na který můžeme kliknout pro zobrazení výsledků.
Přidejte následující kód do 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>
TADY,
- Funkce if (isset($error)){…} kontroluje, zda byla nastavena proměnná error. Pokud je výsledek true, zobrazí se uživateli chyba vrácená knihovnou pro nahrávání.
- Typový soubor umožňuje uživateli přejít do počítače a vybrat soubor k nahrání.
Přidejte následující kód do souboru 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>
TADY,
- používá pomocnou metodu anchor k vytvoření odkazu na nově nahraný soubor v adresáři obrázků. Název se načte z metadat obrázku, která se předávají zobrazení po úspěšném nahrání souboru.
Nyní si vytvořme kontroler, který bude reagovat na nahrávání obrázku.
Přidejte nový soubor ImageUploadController.php do aplikace/řadiče
Přidejte následující kód do 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); } } }
TADY,
- třída ImageUploadController rozšiřuje CI_Controller {…} definuje naši třídu řadiče a rozšiřuje základní řadič CI_Controller
- veřejná funkce __construct() {…} inicializuje metodu nadřazeného konstruktoru a načte pomocné adresy URL a formuláře
- public function index() {…} definuje metodu indexu, která se používá k zobrazení formuláře pro nahrání obrázku
- public function store() {…} definuje metodu, která nahraje obrázek a uloží jej na webový aplikační server.
- $config['upload_path'] = './images/'; nastaví adresář, kam se mají obrázky nahrát
- $config['allowed_types'] = 'gif|jpg|png'; definuje přípustné přípony souborů. To je důležité z bezpečnostních důvodů. Povolené typy zajišťují, že se nahrávají pouze obrázky a jiné typy souborů, jako například PHP, nelze nahrávat, protože by mohly ohrozit server.
- $config['max_size'] = 2000; nastavuje maximální velikost souboru v kilobajtech. V našem příkladu je maximální velikost souboru, který lze nahrát, 2 000 kB, což se blíží 2 MB. Pokud se uživatel pokusí nahrát soubor větší než 2 000 kB, nahrání obrázku se nezdaří a knihovna vrátí chybovou zprávu.
- $config['max_width'] = 1500; nastavuje maximální šířku obrázku, která je v našem případě 1 500 px. Jakákoli větší šířka způsobí chybu.
- $config['max_height'] = 1500; definuje maximální přijatelnou výšku.
- $this->load->library('upload', $config); načte knihovnu pro nahrávání a inicializuje ji pomocí pole $config, které jsme definovali výše.
- Pokud (!$this->upload->do_upload('profile_image')) {…} se pokusí nahrát odeslaný obrázek, který se v našem případě jmenuje profile_image
- $error = array('error' => $this->upload->display_errors()); nastaví chybovou zprávu, pokud se nahrávání nezdaří
- $this->load->view('files/upload_form', $error); načte formulář pro nahrání souboru a zobrazí chybovou zprávu vrácenou z knihovny pro nahrávání
- $data = array('image_metadata' => $this->upload->data()); nastaví metadata obrázku, pokud bylo nahrání úspěšné
- $this->load->view('files/upload_result', $data); úspěšně načte nahraný pohled a předá metadata nahraného souboru.
To je pro kontrolery vše. Nyní si vytvořme adresář, kam budou naše obrázky nahrány. V kořenovém adresáři vaší aplikace vytvořte nový adresář „images“.
Nakonec do našeho souboru routes.php přidáme dvě trasy, které zobrazí formulář a výsledky.
Otevřete soubor application/config/routes.php a přidejte následující trasy
$route['upload-image'] = 'imageuploadcontroller'; $route['store-image'] = 'imageuploadcontroller/store';
TADY,
- $route['upload-image'] = 'imageuploadcontroller'; definuje URL upload-image, který volá metodu index třídy ImageUploadController.
- $route['store-image'] = 'imageuploadcontroller/store'; definuje URL store-image, který přijme vybraný uživatelský soubor a nahraje ho na server.
Jak opravit běžné CodeChyby při nahrávání souborů Igniter
Většina selhání nahrávání vrátí z knihovny nahrávání jasnou zprávu. Níže uvedený seznam popisuje běžné chyby a jejich opravy.
- Typ souboru, který se pokoušíte nahrát, není povolen: přidejte chybějící příponu do konfigurace allowed_types, například 'gif|jpg|png|pdf'.
- Soubor, který se pokoušíte nahrát, je větší než povolená velikost: Zvyšte proměnnou max_size a ověřte, zda jsou proměnné upload_max_filesize a post_max_size v souboru php.ini dostatečně velké.
- Cesta pro nahrávání se zdá být neplatná: Vytvořte adresář upload_path a ujistěte se, že webový server má do něj oprávnění k zápisu.
- Nevybrali jste soubor k nahrání: Zkontrolujte, zda vstupní název odpovídá argumentu do_upload() a zda formulář používá typ enctype multipart/form-data.
Testování aplikace
Spusťme vestavěný PHP server.
Otevřete terminál nebo příkazový řádek a přejděte do kořenového adresáře vaší aplikace. V mém případě se kořenový adresář nachází na disku C:\Sites\ci-app.
cd C:\Sites\ci-app
Spusťte server pomocí následujícího příkazu
php -S localhost:3000
Načtěte následující URL ve vašem webovém prohlížeči: http://localhost:3000/upload-image
Budete moci vidět následující výsledky
Klikněte na vybrat soubor
Měli byste vidět dialogové okno podobné následujícímu
Vyberte požadovaný obrázek a poté klikněte na tlačítko Otevřít
Vybraný název souboru se zobrazí ve formuláři pro nahrání, jak je znázorněno na obrázku výše. Klikněte na tlačítko Nahrát obrázek.
Za předpokladu, že vše půjde dobře, získáte následující výsledky.
Klikněte na odkaz Zobrazit můj obrázek!
Měli byste vidět nahraný obrázek. Výsledky budou podobné následujícím.
Všimněte si, že název nahraného obrázku se zobrazuje v URLNázev obrázku jsme získali z nahraných metadat obrázku.
Poznámka: Proces nahrávání souborů zůstává stejný i pro ostatní typy souborů.





