วิธีอัปโหลดรูปภาพและไฟล์ใน CodeIgniter (พร้อมตัวอย่าง)

การอัพโหลดไฟล์ CodeIgniter

การจัดการไฟล์ถือเป็นสิ่งสำคัญสำหรับเว็บแอปพลิเคชันส่วนใหญ่ หากคุณกำลังพัฒนาระบบการจัดการเนื้อหา คุณจะต้องสามารถอัพโหลดรูปภาพ เอกสาร word รายงาน pdf ฯลฯ หากคุณทำงานบนเว็บไซต์สมาชิก คุณอาจจำเป็นต้องจัดเตรียมให้ผู้อื่นอัพโหลดโปรไฟล์ของพวกเขา ภาพ คลาสการอัพโหลดไฟล์ของ CodeIgniter ทำให้เราทำทุกอย่างที่กล่าวมาข้างต้นได้ง่าย

ในบทช่วยสอนนี้ เราจะดูวิธีใช้ไลบรารีการอัปโหลดไฟล์เพื่อโหลดไฟล์

การอัปโหลดรูปภาพใน CodeIgniter

กำลังอัพโหลดไฟล์เข้า CodeIgniter มีสองส่วนหลัก ส่วนหน้าและส่วนหลัง ส่วนหน้าได้รับการจัดการโดยรูปแบบ HTML ที่ใช้ไฟล์ประเภทอินพุตของแบบฟอร์ม ที่แบ็กเอนด์ ไลบรารีการอัปโหลดไฟล์จะประมวลผลอินพุตที่ส่งจากแบบฟอร์มและเขียนลงในไดเร็กทอรีอัปโหลด

เริ่มต้นด้วยแบบฟอร์มอินพุต

สร้างไดเร็กทอรีใหม่ที่เรียกว่าไฟล์ในไดเร็กทอรี application/views

เพิ่มไฟล์ต่อไปนี้ใน application/views/files

  • upload_form.php – มุมมองนี้มีแบบฟอร์ม HTML ที่มีประเภทอินพุตของไฟล์และส่งไฟล์ที่เลือกไปยังเซิร์ฟเวอร์เพื่อประมวลผล
  • upload_result.php – มุมมองนี้แสดงผลของภาพที่อัพโหลดพร้อมลิงค์ที่เราสามารถคลิกเพื่อดูผลลัพธ์


เพิ่มโค้ดต่อไปนี้ลงใน 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>

ที่นี่

  • if (isset($error)){…} ตรวจสอบว่าตัวแปร error ได้รับการตั้งค่าหรือไม่ หากผลลัพธ์เป็นจริง ข้อผิดพลาดที่ส่งคืนโดยไลบรารี upload จะแสดงให้ผู้ใช้เห็น
  • ไฟล์ประเภทอนุญาตให้ผู้ใช้เบราว์เซอร์ไปยังคอมพิวเตอร์และเลือกไฟล์สำหรับการอัปโหลด

เพิ่มโค้ดต่อไปนี้ลงใน 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>

ที่นี่

  • ใช้ตัวช่วยจุดยึดเพื่อสร้างลิงก์ไปยังไฟล์ที่อัปโหลดใหม่ในไดเร็กทอรีรูปภาพ ชื่อจะถูกดึงมาจากข้อมูลเมตาของรูปภาพที่ส่งไปยังมุมมองเมื่ออัปโหลดไฟล์สำเร็จแล้ว

ตอนนี้เรามาสร้างคอนโทรลเลอร์ที่จะตอบสนองต่อการอัพโหลดรูปภาพของเรากันดีกว่า

เพิ่มไฟล์ใหม่ ImageUploadController.php ใน application/controllers

เพิ่มโค้ดต่อไปนี้ลงใน 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);
        }
    }

}

ที่นี่

  • คลาส ImageUploadController ขยาย CI_Controller {…} กำหนดคลาสคอนโทรลเลอร์ของเราและขยายคอนโทรลเลอร์ฐาน CI_Controller
  • ฟังก์ชั่นสาธารณะ __construct() {…} เริ่มต้นวิธีคอนสตรัคเตอร์พาเรนต์และโหลดตัวช่วย url และแบบฟอร์ม
  • public function index() {…} กำหนดวิธีการทำดัชนีที่ใช้แสดงแบบฟอร์มอัพโหลดรูปภาพ
  • public function store() {…} กำหนดวิธีการที่จะอัปโหลดรูปภาพและจัดเก็บไว้บนเว็บแอปพลิเคชันเซิร์ฟเวอร์
    • $config['upload_path'] = './images/'; กำหนดไดเร็กทอรีที่ควรอัพโหลดรูปภาพ
    • $config['allowed_types'] = 'gif|jpg|png'; กำหนดนามสกุลไฟล์ที่ยอมรับได้ นี่เป็นสิ่งสำคัญด้วยเหตุผลด้านความปลอดภัย ประเภทที่อนุญาตช่วยให้มั่นใจได้ว่าจะอัปโหลดเฉพาะรูปภาพเท่านั้น และไฟล์ประเภทอื่นๆ เช่น php ไม่สามารถอัปโหลดได้ เนื่องจากมีแนวโน้มที่จะทำให้เซิร์ฟเวอร์เสียหายได้
    • $config['max_size'] = 2000; กำหนดขนาดไฟล์สูงสุดเป็นกิโลไบต์ ในตัวอย่างของเรา ไฟล์สูงสุดที่สามารถอัปโหลดได้คือ 2,000kb ซึ่งใกล้เคียงกับ 2MB หากผู้ใช้พยายามอัปโหลดไฟล์ที่มีขนาดใหญ่กว่า 2,000kb การอัปโหลดรูปภาพจะล้มเหลวและไลบรารีจะส่งกลับข้อความแสดงข้อผิดพลาด
    • $config['max_width'] = 1500; กำหนดความกว้างสูงสุดของรูปภาพ ซึ่งในกรณีของเราคือ 1,500 px ความกว้างใดๆ ที่ใหญ่กว่านั้นส่งผลให้เกิดข้อผิดพลาด
    • $config['max_height'] = 1500; กำหนดความสูงสูงสุดที่ยอมรับได้
    • $this->load->library('อัพโหลด', $config); โหลดไลบรารีการอัปโหลดและเริ่มต้นด้วยอาร์เรย์ $config ที่เรากำหนดไว้ด้านบน
    • if (!$this->upload->do_upload('profile_image')) {…} พยายามอัปโหลดภาพที่ส่งมา ซึ่งในกรณีของเราชื่อprofile_image
    • $error = array('error' => $this->upload->display_errors()); ตั้งค่าข้อความแสดงข้อผิดพลาดหากการอัปโหลดล้มเหลว
    • $this->load->view('files/upload_form', $error); โหลดแบบฟอร์มการอัปโหลดไฟล์และแสดงข้อความแสดงข้อผิดพลาดที่ส่งคืนจากไลบรารีการอัปโหลด
    • $data = array('image_metadata' => $this->upload->data()); ตั้งค่าข้อมูลเมตาของรูปภาพหากการอัปโหลดสำเร็จ
    • $this->load->view('files/upload_result', $data); โหลดมุมมองที่อัปโหลดสำเร็จและส่งผ่านข้อมูลเมตาของไฟล์ที่อัปโหลด

นั่นมันสำหรับผู้ควบคุม ตอนนี้เรามาสร้างไดเร็กทอรีที่จะอัพโหลดรูปภาพของเราไปกันดีกว่า สร้างไดเร็กทอรีใหม่ “images” ในไดเร็กทอรีรากของแอปพลิเคชันของคุณ

สุดท้ายนี้ เราจะเพิ่มสองเส้นทางลงในไฟล์ Routes.php ของเราซึ่งจะแสดงแบบฟอร์มและแสดงผล

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

ที่นี่

  • $route['upload-image'] = 'imageuploadcontroller'; กำหนด URL อัพโหลดรูปภาพที่เรียกวิธีดัชนีของ ImageUploadController
  • $route['store-image'] = 'imageuploadcontroller/store'; กำหนด URL ภาพที่จัดเก็บที่ยอมรับไฟล์ผู้ใช้ที่เลือกและอัปโหลดไปยังเซิร์ฟเวอร์

ทดสอบการใช้งาน

มาเริ่มเซิร์ฟเวอร์ PHP ในตัวกัน

เปิดเทอร์มินัล/บรรทัดคำสั่งแล้วเรียกดูรูทของแอปพลิเคชันของคุณ ในกรณีของฉัน รูทอยู่ในไดรฟ์ C:\Sites\ci-app

cd C:\Sites\ci-app

เริ่มเซิร์ฟเวอร์โดยใช้คำสั่งดังต่อไปนี้

php -S localhost:3000

โหลด URL ต่อไปนี้ลงในเว็บเบราว์เซอร์ของคุณ: http://localhost:3000/upload-image

คุณจะสามารถเห็นผลลัพธ์ต่อไปนี้

การอัปโหลดรูปภาพใน CodeIgniter

คลิกเลือกไฟล์

คุณควรจะเห็นหน้าต่างโต้ตอบที่คล้ายกับต่อไปนี้

การอัปโหลดรูปภาพใน CodeIgniter

เลือกภาพที่คุณต้องการจากนั้นคลิกเปิด

การอัปโหลดรูปภาพใน CodeIgniter

ชื่อไฟล์ที่เลือกจะปรากฏในการอัพโหลดแบบฟอร์มดังที่แสดงในภาพด้านบน คลิกที่ปุ่มอัพโหลดรูปภาพ

คุณจะได้รับผลลัพธ์ต่อไปนี้โดยถือว่าทุกอย่างเป็นไปด้วยดี

การอัปโหลดรูปภาพใน CodeIgniter

คลิกดูภาพของฉัน! ลิงค์

คุณควรจะสามารถเห็นภาพที่คุณอัพโหลดได้ ผลลัพธ์จะคล้ายกับต่อไปนี้

การอัปโหลดรูปภาพใน CodeIgniter

หมายเหตุชื่อภาพที่อัพโหลดจะแสดงใน URL เราได้รับชื่อภาพจากข้อมูลเมตาของภาพที่อัพโหลด

หมายเหตุ: กระบวนการอัปโหลดไฟล์ยังคงเหมือนเดิมสำหรับไฟล์ประเภทอื่นๆ