如何从公共文件夹中删除文件 - Laravel 9

224 阅读2分钟

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

在本教程中,我只涉及文件删除而不是文件上传。你可以查看这个Laravel的文件上传教程

How to Delete file from public folder - Laravel 9


1. 存储的文件

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

File stored in public folder - Laravel


2. 控制器

  • 创建PagesController 控制器。
php artisan make:controller PagesController
  • 导入File ,用于删除文件 -use Illuminate\Support\Facades\File;
  • 创建2个方法 -
    • **index -**在$files 阵列中存储文件路径。将$files 指派给$data['files']

加载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,你可以使用同样的代码来删除文件。

如果你觉得这个教程有帮助,那么别忘了分享。