上传新图片后删除图片

时间:2017-06-09 02:24:38

标签: php laravel

我正在使用laravel 5.4我有一个表单,我可以上传我的徽标image,在更新功能中我有这个代码:

//Save logo
         if ($request->hasFile('logo')) {
           $avatar = $request->file('logo');
           $filename = time() . '.' . $avatar->getClientOriginalExtension();
           $location = public_path('avatars/logos/');
           $request->file('logo')->move($location, $filename);
           $oldFilename = $general_Settings->logo;

           $general_Settings->logo = $filename;
           Storage::delete($oldFilename);
         }

         $general_Settings->save();

用于更新我的图片,但是正如您所看到的那样Storage::delete($oldFilename);此部分不起作用,只保留旧图像。

您认为这是什么问题?

2 个答案:

答案 0 :(得分:1)

解决:

问题是Filesystem.php我将我的本地root设置为'root' => public_path('avatars/'),并更改了我的应用中的所有功能,因为没有办法将图像保存在子文件夹中并删除它们只是可以保存在子文件夹中文件夹。

然后我的更新功能变成这样:

 if ($request->hasFile('logo')) {
        $avatar = $request->file('logo');
        $filename = 'sitelogo' . '-' . time() . '.' . $avatar->getClientOriginalExtension();
        $location = public_path('avatars/');
        $request->file('logo')->move($location, $filename);


        $general_Settings->logo = $filename;
      }

      $general_Settings->save();

我希望这有助于某人。

答案 1 :(得分:0)

因为,您已经存储了徽标文件名,而不是文件的完整路径,

您需要从公共文件夹提供完整路径以删除图像。将删除行更改为:

if ($request->hasFile('logo')) {
       $avatar = $request->file('logo');
       $filename = time() . '.' . $avatar->getClientOriginalExtension();
       $location = public_path('avatars/logos/');
       $request->file('logo')->move($location, $filename);

       $oldFilename = $general_Settings->logo;
       $file_path = "avatars/logos/".$oldFilename;

       $general_Settings->logo = $filename;
       Storage::delete($file_path);
     }

     $general_Settings->save();

这可能有用。