问题引入:
当点击修改时(前端传值问题在这不多说,这里主要讲解后台上传,前台传值问题请参考我的上一篇博客:https://blog.csdn.net/qq_40820862/article/details/83683980),使图片发生替换.
实例解决思路:
由于上传的图片都指定在服务器上的某个目录,然后数据库中记录链接这个图片的"链接",所以
1.先获取前端传入的id值和图片
2.判断是否选中了图片才点击的上传.
3.进行文件上传,选择上传目录
4.获取到上传的文件目录(可用字符串拼接出上传目录路径)
5(可选)如果路径存在问题(比如 ' \ ' ' / ' 错乱,可以用替换函数替换 )
6.将拼接的字符串插入到数据库中,使数据库中的链接是你所上传图片的链接.
实例代码:
/**
* 轮播图片 -> 获取前端要修改的id和新图片
*/
public function edit_images(Request $request, $id){
// 接收前端传来点击修改的id的值和前端在本地选择想要更换上传的图片 -> 获取表单上传文件
$file = request()->file('file');
// 判断是否有上传的图片
if($file == null) {
$this->error("很抱歉,您未选择图片!!");
}
// 进行文件上传
$info = $file->rule('md5')->move('./static/index/images/slideshow/');
// 获取上传文件的目录
$saveName = $info->getsaveName();
$str = "/Blogs/public/static/index/images/slideshow/". $saveName;
// strtr 字符串替换函数 -> 将路径的\\替换成
$str1 = strtr($str, '\\', '/');
// 将拼接成的字符串路径插入到数据库中
$code = Db::execute("update all_heads set all_images='$str1' where id = '$id'");
// 判断数据是否成功插入到数据库中
if($code) {
$this->redirect("allimages");
} else {
$this->error("很抱歉,轮播图更换失败!!");
}
}
更换成功后,数据库中的图片链接也跟随着发生了变化.