首页 > 解决方案 > 上传新照片后如何删除旧照片

问题描述

我的控制器中有这个处理图像上传

public function updateProfileImage(Request $request)
    {
        $user = auth('api')->user();

        $image = $request->input('image'); // image base64 encoded
        preg_match("/data:image\/(.*?);/",$image,$image_extension); // extract the image extension
        $image = preg_replace('/data:image\/(.*?);base64,/','',$image); // remove the type part
        $image = str_replace(' ', '+', $image);
        $imageName = 'profile' . time() . '.' . $image_extension[1];
Storage::disk('public')->put($imageName,base64_decode($image));
$user->update($request->except('image') + [
            'profilePicture' => $imageName
        ]);

        return [
            //'Message' => "Success",
            'profilePhoto' => $user['profilePicture']
        ];

    }

上传新图片后如何从目录中删除旧图片。

标签: laravel

解决方案


Storage::delete()您可以使用方法(https://laravel.com/docs/7.x/filesystem#deleting-files )删除图像。因此,在更新之前获取图像,然后在可以执行时删除:

$oldImage = $user->profilePicture;
Storage::disk('public')->put($imageName,base64_decode($image));
$user->update($request->except('image') + [
    'profilePicture' => $imageName
]);

Storage::disk('public')->delete($oldImage);

return [
    //'Message' => "Success",
    'profilePhoto' => $user['profilePicture']
];

PS:我不确定该profilePicture属性是否与您的存储相同。无论如何,如果需要,请进行任何调整以匹配。


推荐阅读