如果你允许用户上传个人资料、产品、物品照片或文件,而在更新文件的过程中,如果你没有删除以前上传的文件,那么在这种情况下,文件就会一直被存储并占据服务器的空间。
在本教程中,我只涉及文件删除而不是文件上传。你可以查看这个Laravel的文件上传教程。

1. 存储的文件
我在public 文件夹中创建了files 文件夹来存储一些文件。

2. 控制器
- 创建
PagesController控制器。
php artisan make:controller PagesController
- 导入
File,用于删除文件 -use Illuminate\Support\Facades\File;。 - 创建2个方法 -
- **index -**在
$files阵列中存储文件路径。将$files指派给$data['files']。
- **index -**在
加载index 视图并传递给$data 数组。
-
- **deleteFile -**使用这个方法删除一个文件。
读取POST文件路径并将其分配给$filepath 。使用File::exists() ,检查$filepath 是否存在。
要使用-删除一个文件:
File::delete($filepath);
这里,将$filepath 传给File::delete() 。
如果一个文件被成功删除,则将成功信息分配给Session::flash 。同样,将失败信息分配给Session::flash 。
完成的代码
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
use Session;
class PagesController extends Controller {
public function index() {
## Files list
$files[] = 'files/file1.jpg';
$files[] = 'files/file2.jpg';
$files[] = 'files/file3.jpg';
$files[] = 'files/file4.jpg';
$files[] = 'files/file5.jpg';
$files[] = 'files/file6.jpg';
$files[] = 'files/file7.jpg';
$files[] = 'files/file8.jpg';
$data['files'] = $files;
return view('deletefile',$data);
}
public function deleteFile(Request $request){
## Read file path
$filepath = $request->post('filepath');
## Check file exists
if (File::exists($filepath)) {
## Delete file
File::delete($filepath);
Session::flash('message','Deleted Successfully.');
Session::flash('alert-class', 'alert-success');
}else{
Session::flash('message','File not exists.');
Session::flash('alert-class', 'alert-danger');
}
return redirect('/');
}
}
3. 路线
- 打开
routes/web.php文件。 - 定义2个路由 -
- **/ -**加载
index视图。 - **/deletefile -**这是POST类型的路线,用于删除文件。
- **/ -**加载
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PagesController;
Route::get('/', [PagesController::class, 'index']);
Route::post('/deleteFile', [PagesController::class, 'deleteFile'])->name('deleteFile');
4. 视图
在resources/views/ 中创建index.blade.php 文件。
如果Session ,使用Bootstrap提醒显示文件删除成功或失败的信息。
在$files 阵列上循环,显示带有删除按钮的图像文件预览。
对于删除创建<form method='post' action="{{ route('deleteFile') }}"> 。在<form > ,创建一个隐藏字段来存储文件路径和一个提交按钮。
完成的代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>How to Delete file from public folder - Laravel 9</title>
<!-- CSS only -->
<link href="https://cdn.jsdelivr.net/npm/
5. 输出
6. 总结
使用上述代码来删除现有的文件,并确保在执行删除脚本之前检查文件是否存在。
在这个例子中, 我删除的是图片文件, 但你也可以类似地删除其他文件.
如果你是在Laravel 8,你可以使用同样的代码来删除文件。
如果你觉得这个教程有帮助,那么别忘了分享。