题主,一个遨游编程的PHPer小菜鸟 ,在楼主的小白脑子里,如果要是更换头像,HTML 只能用FROM 表单提交,后台通过文件上传类处理图片并且把图片URL 存入MYSQL 中,但是这种方法或许有些单一或者狭隘,如果前台用AJAX 传送数据,PHPer 该怎么办? 最近查看手册,测试,百度,有了一下思路: 前端通过ajax 把图片 通过basez64 加码 转换成数据流,后端接受数据后解码把图片的PATH 存入MYSQL .下面上代码:
<!doctype html>
<html>
<head>
<body>
</body>
##这里只标注重要代码,相信你也能看懂的##
<!--//获取到图片的val值-->
$("#touxiang").on("change",function() {
<!--/把获取到值加码: getObjectURL 函数-->
var srcs = getObjectURL(this.files[0]);
$(".picture").attr("src",srcs);
})
</head>
</html>
<?php ``` //处理接受的base64加密数据流 $pic = trim(isset($_POST['image'])? $_POST['image']:''); //设置文件存放的目录 (这里好像只支持相对路径,绝对路径和远程服务器貌似不行,试了多次也没有结果) $upload = './MyFiles/'; //判断文件是否存在 if(file_exist($upload)){ mkdir($upload,777); } //正则匹配处理数据流 (以下代码参考有参考网上) if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $pic, $result)){ //这一步把 匹配到结果赋值给$type; $type = $result[2]; //验证$type 中是否有数组中的值 if(in_array($type,array('jpeg','png','gif','bmp','png'))){ //拼接成一个新的文件 $new_file = $up_dir.date('YmdHis').'.'.$type; //把生成的文件解码,存入到文件 if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $pic)))){ // 生成最终的文件 echo $img_path = str_replace('../../..', '', $new_file); ##其实到上面已经结束了,如果要是存到远程服务器中,这个路径是有问题的,所有我又拼接了一下路径,把这个路径存到数据库## //去掉‘.’ 生成的是:‘/MyFiles/’; $path = substr($img_path,1); //最终要存到数据库的url 地址 $newPath = 'http://127.0.0.1/demo'.$path; } } } ``` 2017.11.24 青春梦敲门砖 ?>