dougang2749 2017-11-26 21:29
浏览 757
已采纳

检查Laravel 5.5 Storage是否存在文件? 阿凡达的存储

Based on this code: https://devdojo.com/episode/laravel-user-image I created the following code in order to upload an avatar and delete the old one. I'm tried to use Storage:Facade but I'm not sure if it is the right way. So let's look at my code excerpt:

                    use Illuminate\Support\Facades\Storage;
                    ..

                    $avatar = $request->file('avatar');

                    $filename = time() . '.' . $avatar->getClientOriginalExtension();      

                    //Using Image intervention, storing to Public/Images/user
                    Image::make($avatar)->orientate()->fit(220)->save( public_path('/images/user/' . $filename ) );
                    $user = Auth::user();

                    $oldavatar = $user->avatar;

                    $user->avatar = $filename;
                    $user->save();

                    //Delete old avatar
                    if($oldavatar != 'profile.jpg' and Storage::disk('public')->exists('/images/user/' . $oldavatar );){

                        Storage::disk('public')->delete('/images/user/' . $oldavatar );
                    }

So I tested it out with dd(Storage::disk('public')->exists('index.php')); etc. I tried every file there is. I also added a disk in the filesystem.php with

    'images' => [
        'driver' => 'local',
        'root' => storage_path('app/public/images'),
        'visibility' => 'public',
    ],

Still nothing, I'm getting a false for exists.

  • 写回答

2条回答 默认 最新

  • dongtui0650 2017-11-27 15:37
    关注

    For future readers:

                       //e.g. user/hashMD5.jpg
                        $filename = $avatar->hashName('user');
    
                        $image = Image::make($avatar)->orientate()->fit(220);
    
                        $location = Storage::disk('images')->put($filename, (string) $image->encode());
    
                        if($location){
                            $user = Auth::user();
    
                            $oldfilename = $user->avatar;                           
    
                            $oldfileexists = Storage::disk('images')->exists( $oldfilename );
    
                            //Delete old avatar
                            if($oldfilename != 'user/profile.jpg' and $oldfileexists){
                                Storage::disk('images')->delete( $oldfilename );
                            }  
    
                            //Save current image to database. Sollte ich nicht update benutzen?
                            $user->avatar = $filename;
                            $user->update();
                        }
    

    With the filesystem.php:

            'images' => [
            'driver' => 'local',
            'root' => storage_path('app/public/images'),
            'visibility' => 'public',
        ],
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加