【问题标题】:Laravel 5.4: how to delete a file stored in storage/appLaravel 5.4:如何删除存储在 storage/app 中的文件
【发布时间】:2022-04-08 07:58:55
【问题描述】:

我想删除存储在 storage/app/myfolder/file.jpg 中的文件。我尝试了以下代码,但都不起作用:

use File    
$file_path = url().'/storage/app/jobseekers_cvs/'.$filename;
unlink($file_path);

use File
$file_path = public_path().'/storage/app/myfolder/'.$filename;
unlink($file_path);

use File
$file_path = app_path().'/storage/app/myfolder/'.$filename;
unlink($file_path);

还有,

File::Delete('/storage/app/myfolder/'.$filename);

请帮忙。

【问题讨论】:

    标签: php laravel laravel-5.3


    【解决方案1】:

    您可以像这样使用 Laravel 外观 Storage

    Storage::delete($file);
    

    或者你可以使用这个:

    unlink(storage_path('app/folder/'.$file));
    

    如果你想删除一个目录,你可以使用这个:

    rmdir(storage_path('app/folder/'.$folder);
    

    要提的一个重要部分是您应该首先检查文件或目录是否存在。

    所以如果你想删除一个文件,你应该这样做:

    if(is_file($file))
    {
        // 1. possibility
        Storage::delete($file);
        // 2. possibility
        unlink(storage_path('app/folder/'.$file));
    }
    else
    {
        echo "File does not exist";
    }
    

    如果您想检查它是否是一个目录,请执行以下操作:

    if(is_dir($file))
    {
        // 1. possibility
        Storage::delete($folder);
        // 2. possibility
        unlink(storage_path('app/folder/'.$folder));
        // 3. possibility
        rmdir(storage_path('app/folder/'.$folder));
    }
    else
    {
        echo "Directory does not exist";
    }
    

    【讨论】:

      【解决方案2】:

      使用storage

      //demo 
      use Illuminate\Support\Facades\Storage;
      
      Storage::delete($filename);
      

      换一种方式,

      unlink(storage_path('app/folder/'.$filename));
      

      【讨论】:

      • 如何设置路径。比如存储/应用/我的文件夹/文件名
      【解决方案3】:

      我找到了答案。这段代码对我有用。

      unlink(storage_path('app/foldername/'.$filename));
      

      【讨论】:

      • 它对我有用,谢谢
      【解决方案4】:

      delete 方法接受要从磁盘中删除的单个文件名或文件数组:

      use Illuminate\Support\Facades\Storage;
      
      Storage::delete('file.jpg');
      
      Storage::delete(['file.jpg', 'file2.jpg']);
      

      如有必要,您可以指定要删除文件的磁盘:

      use Illuminate\Support\Facades\Storage;
      
      Storage::disk('s3')->delete('folder_path/file_name.jpg');
      

      删除目录

      最后,deleteDirectory 方法可用于删除目录及其所有文件:

      Storage::deleteDirectory($directory);
      

      【讨论】:

        【解决方案5】:

        这段代码对我有用。

        use Illuminate\Support\Facades\Storage;
        ....
        $storagePath  = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix();
        if(file_exists($storagePath.$file)) unlink($storagePath.$file);
        

        【讨论】:

          【解决方案6】:

          Storage Facade 的默认根在 config/filesystems.php 中配置,默认为:

          'disks' => [
          
              'local' => [
                  'driver' => 'local',
                  'root' => storage_path('app'),
              ],
          

          所以你应该使用:

          Storage::delete('myfolder/'.$filename)
          

          【讨论】:

            【解决方案7】:
            use Illuminate\Support\Facades\Storage;
            Storage::delete("public/team/" . $mem->avatar);
            

            使用上面的代码,但您需要指定文件的完整路径。

            【讨论】:

              【解决方案8】:

              试试:

              unlink(public_path('uploads\users'). DIRECTORY_SEPARATOR .$user->image);
              

              这对我有用..

              【讨论】:

              • 请在您的答案中添加一些解释,以便其他人可以从中学习。 $user 来自哪里? OP 没有使用该变量
              【解决方案9】:

              例如更新客户资料图片并删除旧图片

              存储在数据库中的文件($customer->image)

              /storage/customers/mhPKW870zGFupAZLI5cwNLoHTAuguCQWoBrDXJCU.jpeg
              

              更新方法

              if ($request->file('image')) {
                if ($customer->image) {
                    // get filename
                    $filename = str_replace('/storage/customers/', '', $customer->image);
                    // remove old image
                    unlink(storage_path('app/public/customers/'.$filename));
                }
                // add new image
                $path = Storage::putFile('public/customers', $request->file('image'));
                $url = Storage::url($path);
              
                $customer->image = $url;
              }
                     
              $saveResult = $customer->save();
              

              【讨论】:

                【解决方案10】:

                对于本地存储使用这个

                use Illuminate\Support\Facades\Storage;
                
                Storage::disk('local')->delete('folder_path/file_name.jpg');
                

                对于 S3 存储桶使用这个

                use Illuminate\Support\Facades\Storage;
                
                Storage::disk('s3')->delete('folder_path/file_name.jpg');
                

                【讨论】:

                  【解决方案11】:

                  例如,我将文件 ini 存储在该路径中,因此我使用此代码删除 020521_0204_17111623001_8340.pdf

                  Storage::delete('files/8340/020521_0204_17111623001_8340.pdf');
                  

                  因为默认在config/filesystems.php中,默认路径是storage_path('app/public')。

                  【讨论】:

                    【解决方案12】:
                     Storage::disk('s3')
                            ->delete("path/to/file/".$fileName.".mp3");
                    

                    如果您使用 s3 对象,请记住包含文件扩展名。我忘了在我的情况下,但似乎同样重要。希望这会有所帮助。

                    【讨论】:

                      猜你喜欢
                      • 2017-09-12
                      • 1970-01-01
                      • 2020-06-05
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2021-10-29
                      • 1970-01-01
                      • 2021-07-28
                      相关资源
                      最近更新 更多