Laravel 檔案上傳:全面的逐步教程

已發表: 2024-10-07

目錄

切換

Laravel 文件上傳

文件上傳是許多網頁應用程式中的重要功能,可讓使用者上傳各種文件類型,例如圖像、文件或影片。 Laravel 是一個流行的 PHP 框架,提供了一種平滑且安全的方式來處理檔案上傳。在本教程中,我們將探索如何在 Laravel 中從頭開始設定和實作檔案上傳。無論您是初學者還是中級開發人員,本指南都將協助您掌握 Laravel 中的文件上傳。

1.Laravel 文件上傳簡介

文件上傳是現代 Web 應用程式不可或缺的一部分。無論是上傳個人資料圖片、履歷或多媒體內容,擁有可靠且安全的文件上傳系統至關重要。 Laravel 憑藉其內建功能,使這個過程變得簡單而有效率。透過對文件驗證、儲存和安全性的支持,Laravel 提供了一種無縫的方式來管理文件上傳。

在本教程中,我們將:

  • 建立文件上傳表單。
  • 處理文件驗證。
  • 將文件儲存在伺服器上。
  • 顯示上傳的文件。
  • 確保文件上傳過程的安全。

在本指南結束時,您將深入了解如何在 Laravel 應用程式中實作和自訂檔案上傳。

2. 前提條件

在深入學習本教學之前,請確保您的電腦上安裝了以下軟體:

  • PHP >= 8.0
  • Composer(PHP 依賴管理器)
  • Laravel 9 或更高版本
  • MySQL 或 SQLite用於資料庫管理
  • Laravel 和 PHP 基礎知識

如果您不熟悉如何設定 Laravel,請參閱 Laravel 官方文件或使用以下命令建立新的 Laravel 專案:

巴什

複製程式碼

作曲家創建專案 –prefer-dist laravel/laravel 檔案上傳教程

建立專案後,導航至專案資料夾:

巴什

複製程式碼

cd 檔案上傳教程

3. 設定 Laravel 項目

設定 Laravel 專案後,讓我們配置基本設定:

資料庫設定:開啟根目錄中的.env檔並更新資料庫憑證。如果您使用 MySQL,請更新下列欄位:
明文
複製程式碼
DB_CONNECTION=mysql

DB_HOST=127.0.0.1

資料庫連接埠=3306

DB_DATABASE=laravel_upload

DB_USERNAME=root

資料庫密碼=

配置.env檔案,執行以下命令遷移預設表:
巴什
複製程式碼
php 工匠遷移

A. 安裝 Bootstrap(可選)

若要設定上傳表單的樣式,您可以輕鬆地包含 Bootstrap。在resources/views/layouts資料夾中,建立一個layout.blade.php檔案並包含 Bootstrap:

html
複製程式碼
<!DOCTYPE html>

<html lang=”en”>

<頭>

<元字元集=“UTF-8”>

<元名稱=“視口”內容=“寬度=裝置寬度,初始比例=1.0”>

<title>檔案上傳教學</title>

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

</頭>

<正文>

<div class=”容器 mt-5″>

@yield('內容')

</div>

</正文>

</html>

4. 建立文件上傳表單

現在,讓我們建立一個文件上傳表單。

建立控制器:產生用於處理文件上傳的控制器:
巴什
複製程式碼
php artisan make:控制器 FileUploadController

定義表單:resources/views資料夾使用下列程式碼建立一個名為upload.blade.php的檔案
html
複製程式碼
@extends('layouts.layout')

@section('內容')

<div 類別=”行”>

<div class=”col-md-6 offset-md-3″>

<h3 class=”text-center”>上傳檔案</h3>

<表單操作=“{{路由('file.upload.post')}}”方法=“POST”enctype=“multipart/form-data”>

@csrf

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

<label for=”file”>選擇一個檔案:</label>

<輸入類型=「檔案」類別=「表單控制」名稱=「檔案」id=「檔案」>

@錯誤('文件')

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

@結束錯誤

</div>

<button type=”submit” class=”btn btn-primary”>上傳</button>

</形式>

</div>

</div>

@結束部分

設定路由:routes/web.php檔案,定義用於顯示表單和處理檔案上傳的路由:
php
複製程式碼
使用App\Http\Controllers\FileUploadController;

Route::get('upload', [FileUploadController::class, 'showForm'])->name('file.upload');

路線::post('upload', [FileUploadController::class, 'uploadFile'])->name('file.upload.post');

5. 處理文件上傳邏輯

FileUploadController.php,編寫處理檔案上傳過程的邏輯:

顯示表格:
php
複製程式碼
公用函數 showForm() {

返回視圖('上傳');

}

處理文件上傳:
在同一個控制器中,加入以下方法來處理檔案上傳:
php
複製程式碼
公用函數 uploadFile(請求 $request) {

// 驗證上傳的文件

$請求->驗證([

'檔案' => '必要|檔|mimes:jpeg,png,pdf,docx|最大:2048',

]);

// 儲存檔案

if ($request->file('file')) {

$檔名 = 時間() 。 '_' 。 $請求->檔->getClientOriginalName();

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

}

return back()->with('成功', '文件上傳成功。');

}

此方法執行檔案驗證,檢查檔案是否存在,並使用storeAs方法儲存它。

6. 驗證文件上傳

驗證對於確保用戶僅上傳允許的文件類型和大小至關重要。 Laravel 的validate方法簡化了這個過程。這裡使用的驗證規則是:

  • required :確保檔案已上傳。
  • file :確保上傳的項目是檔案。
  • mimes :指定允許的檔案類型(例如,jpeg、png、pdf、docx)。
  • max :指定最大檔案大小(以千位元組為單位)(例如,2048 KB = 2 MB)。

您可以自訂這些規則以滿足您的應用程式的要求。

7. 儲存文件

Laravel 的Storage門面可讓您輕鬆儲存檔案。在上面的範例中,我們使用storeAs方法將檔案儲存在public/uploads目錄中。要使public/uploads資料夾可訪問,您需要將儲存目錄與 public 資料夾連結起來。運行以下命令:

巴什

複製程式碼

php artisan 儲存:鏈接

此指令建立從storage/app/publicpublic/storage 的符號連結

8. 顯示上傳的文件

若要顯示上傳的文件,請從儲存資料夾中檢索它們並使用儲存外觀產生 URL 。顯示影像或檔案的方法如下:

在控制器中:
php
複製程式碼
公用函數 showUploads() {

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

return view('上傳', 緊湊('檔案'));

}

  1. 在視圖中:

建立resources/views/uploads.blade.php檔案:
html
複製程式碼
@extends('layouts.layout')

@section('內容')

<h3>上傳的檔案:</h3>

<ul>

@foreach($files 作為 $file)

<li><a href=”{{ asset('storage/' . $file) }}”>{{ basename($file) }}</a></li>

@endforeach

</ul>

@結束部分

  1. 這將產生帶有下載連結的上傳檔案清單。

9. 保護文件上傳

如果處理不當,文件上傳可能會帶來安全風險。以下是保護文件上傳安全的一些最佳做法:

  • 限制允許的文件類型:始終使用mime規則驗證文件類型
  • 限製檔案大小:限製檔案大小以防止過多的伺服器資源消耗。
  • 使用正確的檔案命名:使用唯一的名稱儲存檔案以避免覆蓋現有檔案。
  • 掃描文件:考慮使用防毒或文件掃描工具來偵測惡意上傳。
  • 限制公共存取:避免將敏感檔案儲存在可公開存取的目錄中。您可以使用 Laravel 的私有檔案儲存目錄並建立控制器來安全地服務它們。

10. 結論

文件上傳是許多 Web 應用程式的重要功能,Laravel 透過其內建工具和功能簡化了這個過程。在本教程中,我們介紹了設定檔案上傳、驗證和儲存檔案、顯示檔案以及保護上傳過程的基礎知識。在此基礎上,您可以自訂和擴充檔案上傳功能以滿足您的專案需求。