第 1 步:安装 Laravel 12
laravel new example-app
步骤 2:创建迁移和模型
php artisan make:migration create_files_table
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('files', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('files');
}
};
php artisan migrate
php artisan make:model File
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class File extends Model
{
use HasFactory;
protected $fillable = [
'name'
];
}
第 3 步:创建 Controller
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\View\View;
use Illuminate\Http\RedirectResponse;
use App\Models\File;
class FileController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index(): View
{
return view('fileUpload');
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function store(Request $request): RedirectResponse
{
// Validate incoming request data
$request->validate([
'files' => 'required|array',
'files.*' => 'required|mimes:pdf,xlx,csv|max:2048',
]);
// Initialize an array to store file information
$files = [];
// Process each uploaded file
foreach($request->file('files') as $file) {
// Generate a unique name for the file
$fileName = time() . '_' . uniqid() . '.' . $file->getClientOriginalExtension();
// Move the file to the desired location
$file->move(public_path('uploads'), $fileName);
// Add file information to the array
$files[] = ['name' => $fileName];
}
// Store files in the database using create method
foreach ($files as $fileData) {
File::create($fileData);
}
return back()->with('success', 'Files uploaded successfully!')
->with('files', $files);
}
}
$file->storeAs('files', $fileName);
// storage/app/files/file.png
$file->move(public_path('files'), $fileName);
// public/files/file.png
$file->storeAs('files', $fileName, 's3');
Step 4: Create Routes 第 4 步:创建路由
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\FileController;
Route::get('file-upload', [FileController::class, 'index']);
Route::post('file-upload', [FileController::class, 'store'])->name('file.store');
第 5 步:创建 Blade 文件
<!DOCTYPE html>
<html>
<head>
<title>Laravel 12 Multiple File Upload Example - ItSolutionStuff.com</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css" />
</head>
<body>
<div class="container">
<div class="card mt-5">
<h3 class="card-header p-3"><i class="fa fa-star"></i> Laravel 12 Multiple File Upload Example - ItSolutionStuff.com</h3>
<div class="card-body">
@session('success')
<div class="alert alert-success" role="alert">
{{ $value }}
</div>
@endsession
<form action="{{ route('file.store') }}" method="POST" enctype="multipart/form-data" class="mt-2">
@csrf
<div class="mb-3">
<label class="form-label" for="inputFile">Select Files:</label>
<input
type="file"
name="files[]"
id="inputFile"
multiple
class="form-control @error('files') is-invalid @enderror">
@error('files')
<span class="text-danger">{{ $message }}</span>
@enderror
</div>
<div class="mb-3">
<button type="submit" class="btn btn-success"><i class="fa fa-save"></i> Upload</button>
</div>
</form>
</div>
</div>
</div>
</body>
</html>