如何解决在更新Laravel上不会删除存储中的旧文件
我正在尝试在更新新图像时从存储中删除现有图像。 但是每次插入新图像时,都会保留先前的图像。
当我从数据库中删除图像以解除链接时,我得到完整的URL 即
http://127.0.0.1:8000/teacger-image/1598097262-85508.jpg
仅teacher-image/1598097262-85508.jpg
已存储在数据库中。
删除图片的功能
public function deleteImageFromStorage($value)
{
if (!empty($value)) {
File::delete('public/' . $value);
}
}
当更新期间发布图像时,我已经在控制器中调用了该方法。
更新方法包括
if ($request->hasFile('image')) {
$teacher->deleteImageFromStorage($teacher->image);
$file = $request->file('image');
$filename = time() . '-' . mt_rand(0,100000) . '.' . $file->getClientOriginalExtension();
$path = $file->storeAs('teacher-image',$filename);
$teacher->image = $path;
}
我也使用过Storage::delete()
和unlink
,但似乎都没有用。
帮助
解决方法
这就是我一直在Laravel中删除文件的方式。
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
class ImagesController extends Controller
{
public function deleteImageFromStorage($value)
{
if ( file_exists( storage_path($value) ) ) {
Storage::delete($value);
}
}
}
请确保使用Illuminate \ Support \ Facades \ Storage。
,尝试将您的deleteImageFromStorage方法更改为此:
public function deleteImageFromStorage($value)
{
if (!empty($value)) {
File::delete(public_path($value));
}
}
,
我必须这样做才能解决我的问题。 该url由配置文件下filesystems.php上的配置集获取。
public function deleteImageFromStorage($value)
{
$path_explode = explode('/',(parse_url($value))['path']); //breaking the full url
$path_array = [];
array_push($path_array,$path_explode[2],$path_explode[3]); // storing the value of path_explode 2 and 3 in path_array array
$old_image = implode('/',$path_array);
if ($old_image) {
Storage::delete($old_image);
}
}
如果将来有人遇到相同的问题,这可能会有所帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。