Laravel 8:存储::删除(文件)返回 false

Der*_* T. 2 delete-file laravel

从昨天开始,我无法从文件夹中删除文件\n这是我在控制器中的代码。\n\xe2\x80\x8b\npublic function update_avatar(Request $request)\n{

\n
    // Handle the user upload of avatar\n    if ($request->hasfile('avatar')) {\n        $avatar = $request->file('avatar');\n        $filename = time() . '.' . $avatar->getClientOriginalExtension();\n        if (auth()->user()->avatar) {\n            // dd('/uploads/avatars/'. auth()->user()->avatar);\n            Storage::delete('/uploads/avatars/'. auth()->user()->avatar);\n            //dd(Storage::delete('/uploads/avatars/'. auth()->user()->avatar));\n        }\n        Image::make($avatar)->resize(500, 500)->save(public_path('/uploads/avatars/' . $filename));\n\n        $user = Auth::user();\n        $user->avatar = $filename;\n        $user->save();\n    }\n\n    return view('profile', array('user' => Auth::user()) );\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

\xe2\x80\x8b

\n

调试该方法后,不会删除文件夹中的文件

\n

\xe2\x80\x8b dd('/uploads/avatars/'. auth()->user()->avatar); \xe2\x80\x8b

\n

我正确地获取了文件,但是当我调试时

\n

dd(Storage::delete('/uploads/avatars/'. auth()->user()->avatar)); \xe2\x80\x8b

\n

结果为

\n

ps:我使用 laravel 8

\n

bhu*_*cho 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))中检查它

所以如果你选择,Storage::disk('public')->delete($filename);它会选择公共磁盘,路径为app/public,甚至你可以手动添加它(我没有测试过这个方法,所以不能保证它的成功。)

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

所以你可以使用,

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