Laravel 8 : Storage::delete (文件) return 假

Laravel 8 : Storage::delete (file) return false

从昨天开始,我无法从文件夹中删除文件 这是我在控制器中的代码。 的 public 函数 update_avatar(请求 $request) {

    // Handle the user upload of avatar
    if ($request->hasfile('avatar')) {
        $avatar = $request->file('avatar');
        $filename = time() . '.' . $avatar->getClientOriginalExtension();
        if (auth()->user()->avatar) {
            // dd('/uploads/avatars/'. auth()->user()->avatar);
            Storage::delete('/uploads/avatars/'. auth()->user()->avatar);
            //dd(Storage::delete('/uploads/avatars/'. auth()->user()->avatar));
        }
        Image::make($avatar)->resize(500, 500)->save(public_path('/uploads/avatars/' . $filename));

        $user = Auth::user();
        $user->avatar = $filename;
        $user->save();
    }

    return view('profile', array('user' => Auth::user()) );

}

其中并没有删除文件夹中的文件,经过调试方法

dd('/uploads/avatars/'. auth()->user()->avatar); ​

我正确地获取了文件,但是当我在

上调试时

dd(Storage::delete('/uploads/avatars/'. auth()->user()->avatar)); ​

结果是FALSE

ps:我正在使用 laravel 8

一开始你在做Storage::delete('/uploads/avatars/'. auth()->user()->avatar);所以默认情况下如果你没有改变任何东西,磁盘设置为本地,

您可以从您的 config/filesystems.php 中查看(此处显示来自 laravel github 官方仓库 (https://github.com/laravel/laravel/blob/8.x/config/filesystems.php#L44))

因此,如果您 select、Storage::disk('public')->delete($filename);,它会 select public 的磁盘,路径为 app/public,即使您可以手动添加它(我没有测试过这个方法所以不能保证它成功。)

其次,如果你使用文件, 从https://github.com/laravel/framework/blob/8.x/src/Illuminate/Filesystem/Filesystem.php#L262可以看出, 它基本上调用 php 的 unlink() 方法。 基本上都是在Illuminate/Filesystem/Filesystem中调用delete方法,只是传递路径和调用方法不同

所以你可以使用任何一个,

  • 使用Illuminate\Support\Facades\FileFile::delete($filename);
  • 使用 IIlluminate\Support\Facades\Storage Storage::disk('public')->delete($filename);(在 github 上)
  • 从 php
  • 取消链接()