JS之 解决fakepath问题,并实现base64图片上传(单图上传)

24 篇文章 0 订阅

base64 编码转化图片并进行指定路径的保存和上传处理

https://blog.csdn.net/u011415782/article/details/79978608
https://blog.csdn.net/qq_38381336/article/details/77943377
https://blog.csdn.net/yayayangge/article/details/83654464

解决 fakepath

https://blog.csdn.net/weixin_39762926/article/details/79610154

页面 html 中

 <form class="form-horizontal m-t" method="post" enctype="multipart/form-data" action="#">
        <div class="row">
             <div class="col-md-6">
                 <div class="image-crop" style="margin-bottom:-20px;">
                     <img class="img-circle" style="width:64px;height:64px;" src="{$avatar}">
                 </div>
             </div>
             <div class="col-md-6" style="margin-top:70px;margin-left:10px;">
                 <h4>图片预览:</h4>
                 <div class="btn-group">
                     <label title="上传图片" for="inputImage" class="btn btn-primary">
                
 			<!-- 方法1 -->
 			<img name="image" id="myimage" src="" style="width:80px;height:100px;margin-left:-175px;margin-bottom:20px;"/>
 			<input id="files" name="avatar" type="file" value="选择" onchange="changeImge(this)">
 			<input id="successimg" type="hidden" value="" >
 			
                     </label>
                 </div>
             </div>
         </div>
         <p></p>
         <label><button class="btn btn-primary-red" id="edit" type="submit">提交</button></label>
     </form>

js

<script>

function changeImge(obj) {

    var f = obj.files[0];
    var filePath = obj;
    var type = f.type;     //image/jpeg
    var size = f.size;
    var tp = type.split("/")[0];
   
    if (tp != "image" || size > 10*1024*1024){
        alert("请选择图片-10MB内!")
        return false;
    }
    var element = document.getElementById('myimage');

    if (filePath != null && filePath != "") {
        //获取文件路径
        element.src = window.URL.createObjectURL(obj.files[0]);    // 这个函数用来预览本地图片或者视频

            // 用下面的两个方法,可以把blob图片格式转成base64图片格式,https://www.zhaokeli.com/article/8055.html
            
            var blobToBase64=function(blob, callback) {
                var a = new FileReader();
                a.onload = function(e) {
                    callback(e.target.result);
                }
                a.readAsDataURL(blob);
            };

            //使用方法,传入一个blob数据,在回调中接收处理成功的图片url
            blobToBase64(obj.files[0], function(data) {
                // $('#successimg img').attr('src', data);   // 赋值
                $('#successimg').val(data);   // 赋值
            });
    }
}

// 获取 图片地址

$('#edit').on('click', function(){
    var img = $("#successimg").val();   // base64 格式
    $.ajax({
        type: 'POST',
        url:  "/admin/user/save_avatar",
        data: {
          url: img
        },
        dataType: 'json',
        success: function(data){
            if (data.status == 1) {
                alert("编辑成功");
            } else {
                // alert(222);
                alert("编辑失败");
            }
        }
    });
})

// blob 转化成 base64
// function blobToDataURL(blob) {
//         var a = new FileReader();
//         a.readAsDataURL(blob);//读取文件保存在result中
//         a.onload = function (e) {
//         var getRes = e.target.result;//读取的结果在result中
//         }
//  }


</script>

控制器中

// 获取新上传的头像

public function save_avatar(){

	// $file = request()->file("avatar");    
	$data = $_POST;
	$base64_image_content = $data['url'];
	$path = $_SERVER['DOCUMENT_ROOT'].'/static/imgs';    // 上传到的文件夹
	
	//匹配出图片的格式,将Base64图片转换为本地图片并保存
	
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image_content, $result)){
        $type = $result[2];
        $new_file = $path."/".date('Ymd',time())."/";
        if(!file_exists($new_file)){
            //检查是否有该文件夹,如果没有就创建,并给予最高权限
            mkdir($new_file, 0700);
        }

        $new_file = $new_file.time().".{$type}";
        if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_image_content)))){
        	// "\/E:\/phpstudy2018\/PHPTutorial\/WWW\/h_layui\/public\/static\/imgs\/20191018\/1571384359.jpeg"
        	
            // return '/'.$new_file;

            // 修改数据库  sp_admin
            
            $udata = session::get('USER_INFO');
			$uid = $udata['uid'];

			$where['id'] = $uid;
			$new = explode('public',$new_file);
			
			$bb['touxiang'] = $new[1];

			$res =  DB::name('admin')->where($where)->update($bb);
			if($res){
				$rs=json(1); 
			}else{
				$rs=json(0); 
			}
			return $rs;
        }else{
            return false;
        }
    }else{
        return false;
    }
	die;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值