การอัปโหลดไฟล์ Laravel: บทช่วยสอนแบบทีละขั้นตอนที่ครอบคลุม

เผยแพร่แล้ว: 2024-10-07

สารบัญ

สลับ

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

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

1. รู้เบื้องต้นเกี่ยวกับการอัพโหลดไฟล์ Laravel

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

ในบทช่วยสอนนี้ เราจะ:

  • สร้างแบบฟอร์มอัพโหลดไฟล์
  • จัดการการตรวจสอบไฟล์
  • จัดเก็บไฟล์บนเซิร์ฟเวอร์
  • แสดงไฟล์ที่อัพโหลด
  • รักษาความปลอดภัยกระบวนการอัพโหลดไฟล์

ในตอนท้ายของคู่มือนี้ คุณจะมีความเข้าใจที่ชัดเจนเกี่ยวกับวิธีการใช้งานและปรับแต่งการอัพโหลดไฟล์ในแอปพลิเคชัน Laravel

2. ข้อกำหนดเบื้องต้น

ก่อนที่จะเข้าสู่บทช่วยสอน ตรวจสอบให้แน่ใจว่าได้ติดตั้งสิ่งต่อไปนี้ในเครื่องของคุณ:

  • PHP >= 8.0
  • นักแต่งเพลง(ตัวจัดการการพึ่งพาสำหรับ PHP)
  • Laravel 9 หรือสูงกว่า
  • MySQL หรือ SQLiteสำหรับการจัดการฐานข้อมูล
  • มีความรู้พื้นฐานเกี่ยวกับ Laravel และ PHP

หากคุณไม่คุ้นเคยกับวิธีตั้งค่า Laravel โปรดดูเอกสารอย่างเป็นทางการของ Laravel หรือใช้คำสั่งต่อไปนี้เพื่อสร้างโปรเจ็กต์ Laravel ใหม่:

ทุบตี

คัดลอกรหัส

ผู้แต่งสร้างโครงการ - ชอบ - แยกไฟล์ laravel / laravel - อัพโหลดไฟล์ - กวดวิชา

เมื่อสร้างโปรเจ็กต์แล้ว ให้ไปที่โฟลเดอร์โปรเจ็กต์:

ทุบตี

คัดลอกรหัส

สอนอัพโหลดไฟล์ cd

3. การตั้งค่าโครงการ Laravel

เมื่อตั้งค่าโปรเจ็กต์ Laravel ของคุณแล้ว ให้กำหนดการตั้งค่าพื้นฐาน:

การกำหนดค่าฐานข้อมูล:เปิด ไฟล์ .env ในไดเร็กทอรีรากและอัปเดตข้อมูลรับรองฐานข้อมูลของคุณ หากคุณใช้ MySQL ให้อัปเดตฟิลด์ต่อไปนี้:
ข้อความธรรมดา
คัดลอกรหัส
DB_CONNECTION=mysql

DB_HOST=127.0.0.1

DB_PORT=3306

DB_DATABASE=laravel_upload

DB_USERNAME=รูท

DB_รหัสผ่าน=

หลังจากกำหนดค่า ไฟล์ .env แล้ว ให้รันคำสั่งต่อไปนี้เพื่อย้ายตารางเริ่มต้น:
ทุบตี
คัดลอกรหัส
php artisan โยกย้าย

A. ติดตั้ง Bootstrap (ทางเลือก)

หากต้องการจัดรูปแบบแบบฟอร์มการอัปโหลด คุณสามารถรวม Bootstrap ไว้เพื่อความสะดวก ใน โฟลเดอร์ resources/views/layouts ให้สร้าง ไฟล์ layout.blade.php และรวม Bootstrap:

html
คัดลอกรหัส
<!DOCTYPE html>

<html lang=”th”>

<หัว>

<meta charset=”UTF-8″>

<meta name=”viewport” content=”width=device-width, default-scale=1.0″>

<title>บทช่วยสอนการอัพโหลดไฟล์</title>

<link href=”https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css” rel=”stylesheet”>

</หัว>

<ร่างกาย>

<div class=”คอนเทนเนอร์ mt-5″>

@ผลผลิต('เนื้อหา')

</div>

</ร่างกาย>

</html>

4. การสร้างแบบฟอร์มอัพโหลดไฟล์

ตอนนี้เรามาสร้างแบบฟอร์มการอัพโหลดไฟล์กันดีกว่า

สร้างคอนโทรลเลอร์:สร้างคอนโทรลเลอร์สำหรับจัดการการอัพโหลดไฟล์:
ทุบตี
คัดลอกรหัส
php artisan make: คอนโทรลเลอร์ FileUploadController

กำหนดแบบฟอร์ม:ใน โฟลเดอร์ resources/views ให้สร้างไฟล์ชื่อ upload.blade.php ด้วยโค้ดต่อไปนี้:
html
คัดลอกรหัส
@ ขยาย ('layouts.layout')

@section('เนื้อหา')

<คลาส div=”แถว”>

<คลาส div=”col-md-6 ออฟเซ็ต-md-3″>

<h3 class=”text-center”>อัปโหลดไฟล์</h3>

<form action=”{{ เส้นทาง ('file.upload.post') }}” method=”POST” enctype=”multipart/form-data”>

@csrf

<div class=”form-group mb-3″>

<label for=”file”>เลือกไฟล์:</label>

<ประเภทอินพุต =”ไฟล์” class=”ฟอร์มควบคุม” ชื่อ=”ไฟล์” id=”ไฟล์”>

@error('ไฟล์')

<small class=”text-danger”>{{ $message }}</small>

@enderror

</div>

<button type=”submit” class=”btn btn-primary”>อัพโหลด</button>

</แบบฟอร์ม>

</div>

</div>

@ส่วนท้าย

ตั้งค่าเส้นทาง:ใน ไฟล์ เส้นทาง/web.php ให้กำหนดเส้นทางสำหรับการแสดงแบบฟอร์มและจัดการการอัพโหลดไฟล์:
PHP
คัดลอกรหัส
ใช้แอป\Http\Controllers\FileUploadController;

เส้นทาง::get('upload', [FileUploadController::class, 'showForm'])->name('file.upload');

เส้นทาง::post('upload', [FileUploadController::class, 'uploadFile'])->name('file.upload.post');

5. การจัดการลอจิกการอัพโหลดไฟล์

ใน FileUploadController.php ให้เขียนตรรกะเพื่อจัดการกระบวนการอัพโหลดไฟล์:

แสดงแบบฟอร์ม:
PHP
คัดลอกรหัส
ฟังก์ชั่นสาธารณะ showForm() {

มุมมองย้อนกลับ ('อัปโหลด');

-

จัดการการอัพโหลดไฟล์:
ในคอนโทรลเลอร์เดียวกัน ให้เพิ่มวิธีการต่อไปนี้เพื่อจัดการการอัปโหลดไฟล์:
PHP
คัดลอกรหัส
ฟังก์ชั่นสาธารณะ uploadFile (ขอ $ คำขอ) {

// ตรวจสอบไฟล์ที่อัพโหลด

$คำขอ->ตรวจสอบ([

'file' => 'จำเป็น|ไฟล์|mimes:jpeg,png,pdf,docx|max:2048',

-

//เก็บไฟล์

ถ้า ($คำขอ->ไฟล์('ไฟล์')) {

$ชื่อไฟล์ = เวลา() . - $คำขอ->ไฟล์->getClientOriginalName();

$filePath = $request->file('file')->storeAs('uploads', $fileName, 'public');

-

return back()->with('success', 'อัพโหลดไฟล์สำเร็จ');

-

เมธอดนี้ดำเนินการตรวจสอบไฟล์ ตรวจสอบว่ามีไฟล์อยู่หรือไม่ และจัดเก็บโดยใช้ เมธอด storeAs

6. ตรวจสอบการอัพโหลดไฟล์

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

  • จำเป็น : ตรวจสอบให้แน่ใจว่าไฟล์ถูกอัพโหลด
  • file : ตรวจสอบให้แน่ใจว่ารายการที่อัพโหลดเป็นไฟล์
  • mimes : ระบุประเภทไฟล์ที่อนุญาต (เช่น jpeg, png, pdf, docx)
  • max : ระบุขนาดไฟล์สูงสุดเป็นกิโลไบต์ (เช่น 2048 KB = 2 MB)

คุณสามารถปรับแต่งกฎเหล่านี้ให้เหมาะกับความต้องการของแอปพลิเคชันของคุณได้

7. การจัดเก็บไฟล์

ซุ้ม พื้นที่เก็บข้อมูล ของ Laravel ช่วยให้คุณจัดเก็บไฟล์ได้อย่างง่ายดาย ในตัวอย่างข้างต้น เราใช้ เมธอด storeAs เพื่อจัดเก็บไฟล์ใน ไดเร็กทอรี public/uploads หากต้องการให้ เข้าถึงโฟลเดอร์ สาธารณะ/อัปโหลด ได้ คุณจะต้องเชื่อมโยงไดเร็กทอรีพื้นที่เก็บข้อมูลกับโฟลเดอร์สาธารณะ รันคำสั่งต่อไปนี้:

ทุบตี

คัดลอกรหัส

ที่เก็บข้อมูล php artisan: ลิงก์

คำสั่งนี้สร้างลิงก์สัญลักษณ์จาก storage/app/public ไปยัง public/ storage

8. การแสดงไฟล์ที่อัพโหลด

หากต้องการแสดงไฟล์ที่อัพโหลด ให้เรียกค้นไฟล์เหล่านั้นจากโฟลเดอร์จัดเก็บข้อมูลและสร้าง URL โดยใช้ ส่วนหน้าของ พื้นที่เก็บข้อมูล ต่อไปนี้เป็นวิธีแสดงรูปภาพหรือไฟล์:

ในตัวควบคุม:
PHP
คัดลอกรหัส
ฟังก์ชั่นสาธารณะ showUploads() {

$files = Storage::disk('public')->files('uploads');

มุมมองย้อนกลับ ('อัปโหลด', กะทัดรัด ('ไฟล์'));

-

  1. ในมุมมอง:

สร้าง ไฟล์ resources/views/uploads.blade.php :
html
คัดลอกรหัส
@ ขยาย ('layouts.layout')

@section('เนื้อหา')

<h3>ไฟล์ที่อัพโหลด:</h3>

<ul>

@foreach($ไฟล์เป็น $file)

<li><a href=”{{ สินทรัพย์('storage/' . $file) }}”>{{ basename($file) }}</a></li>

@endforeach

</ul>

@ส่วนท้าย

  1. นี่จะสร้างรายการไฟล์ที่อัพโหลดพร้อมลิงค์ดาวน์โหลด

9. การรักษาความปลอดภัยการอัพโหลดไฟล์

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

  • จำกัดประเภทไฟล์ที่อนุญาต: ตรวจสอบประเภทไฟล์โดยใช้ กฎ mimes เสมอ
  • จำกัดขนาดไฟล์: จำกัดขนาดไฟล์เพื่อป้องกันการใช้ทรัพยากรเซิร์ฟเวอร์มากเกินไป
  • ใช้การตั้งชื่อไฟล์ที่เหมาะสม: จัดเก็บไฟล์โดยใช้ชื่อเฉพาะเพื่อหลีกเลี่ยงการเขียนทับไฟล์ที่มีอยู่
  • สแกนไฟล์: ลองใช้โปรแกรมป้องกันไวรัสหรือเครื่องมือสแกนไฟล์เพื่อตรวจจับการอัปโหลดที่เป็นอันตราย
  • จำกัดการเข้าถึงแบบสาธารณะ: หลีกเลี่ยงการจัดเก็บไฟล์ที่ละเอียดอ่อนในไดเร็กทอรีที่สาธารณะสามารถเข้าถึงได้ คุณสามารถใช้ ไดเร็กทอรี พื้นที่เก็บข้อมูล ของ Laravel สำหรับไฟล์ส่วนตัวและสร้างตัวควบคุมเพื่อให้บริการได้อย่างปลอดภัย

10. บทสรุป

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