blob流转base64图片预览上传到thinkphp5

再整理图片上传发现blob流转base64图片预览上传到thinkphp5的文章很少,这次整理一个,希望对大家有帮助
1.使用了Bootstrap的filestyle的上传插件,layui的参考我其他的文章,对了记得引入bootstrap-filestyle.js上传js,这个是图片放大的zoomify.js如果需要图片放大预览可以也引入,jq 和Bootstrap也记得引入哦~
2.这段是html,通过插件获取图片

<!--                上传服务书-->
        <div class="ys form-group clearfix">
            <a href="javascript:;" class="a-upload">
                <input type="file" name="myFile" id="myFile" multiple="multiple" >
            </a>
            <span class="tips">(售后服务书必须填写完整,拍照必须画质清晰)</span>
            <div class="img_div">
            </div>
            <div class="shade" onclick="javascript:closeShade()">
                <div class="">
                <span class="text_span">

                </span>
                </div>
            </div>
            <div class="shadeImg" onclick="javascript:closeShadeImg()">
                <div class="">
                    <img class="showImg" src="">
                </div>
            </div>

        </div>

        <script type="text/javascript">

            $('#myFile').filestyle({
                buttonText : '点击上传',
                buttonName : 'btn-primary',
                buttonBefore : true,
                placeholder : '请上传售后服务书',
                extension: 'png,jpg,jpeg',
                type: 'img/png,img/jpg,img/jpeg',
                message: '请重新选择图片'
            });

        </script>

3.拿到图片是blob可以直接预览的我为了方便后台处理转换成base64了
4.图片先过滤一下
5.再图片转换成base64
6.生成到页面上

<!--        上传售后服务书 -->
<script type="text/javascript">
    $(function() {
        var all_urls="";
        var all_types="";
        var objUrl;
        var img_html;
        $("#myFile").change(function() {
            var img_div = $(".img_div");
            var filepath = $("input[name='myFile']").val();
            for(var i = 0; i < this.files.length; i++) {
                objUrl = getObjectURL(this.files[i]);
                var extStart = filepath.lastIndexOf(".");
                var ext = filepath.substring(extStart, filepath.length).toUpperCase();

                if(ext != ".BMP" && ext != ".PNG" && ext != ".GIF" && ext != ".JPG" && ext != ".JPEG") {
                    $(".shade").fadeIn(500);
                    $(".text_span").text("图片限于bmp,png,gif,jpeg,jpg格式");
                    this.value = "";
                    $(".img_div").html("");
                    return false;
                }
                all_types=all_types+this.files[i].type;
                //将图片转换成base64自字符
                var oFReader = new FileReader();
                oFReader.readAsDataURL(this.files[i]);
                oFReader.onload = function (oFREvent) {
                    all_urls=oFREvent.target.result; //拼接data形式base64的url
                    img_html = "<div class='isImg  col-xs-6 col-md-6'><img src=" + all_urls + " /><button class='removeBtn' onclick='javascript:removeImg(this)'>x</button></div>";
                    img_div.append(img_html);
                    $('.isImg img').zoomify();
                };

                
            }

            return true;
        });
        /*

        描述:鉴定每个浏览器上传图片url 目前没有合并到Ie
         * */
        function getObjectURL(file) {
            var url = null;
            if(window.createObjectURL != undefined) { // basic
                url = window.createObjectURL(file);
            } else if(window.URL != undefined) { // mozilla(firefox)
                url = window.URL.createObjectURL(file);
            } else if(window.webkitURL != undefined) { // webkit or chrome
                url = window.webkitURL.createObjectURL(file);
            }
            //console.log(url);
            return url;
        }
    });
    /*
            描述:上传图片附带删除 再次地方可以加上一个ajax进行提交到后台进行删除
     * */
    function removeImg(r){
        $(r).parent().remove();
    }
    /*
             描述:上传图片附带放大查看处理
     * */
    function lookBigImg(b){
        $(".shadeImg").fadeIn(500);
        $(".showImg").attr("src",$(b).attr("src"))
    }
    /*

        描述:关闭弹出层
     * */
    function closeShade(){
        $(".shade").fadeOut(500);
    }
    /*

        描述:关闭弹出层
     * */
    function closeShadeImg(){
        $(".shadeImg").fadeOut(500);
    }
</script>

7.上传到服务器
8.先获取如果过滤掉base641的开头,方便后台处理
9.用ajax提交到后台

            applyId=new Array();
            applyId2=new Array();
            // 截取data:image/png;base64,
            $('.isImg img').each(function(){
                var idVal = $(this).attr("src");
                var index=idVal.lastIndexOf(",");
                idVal=idVal.substring(index+1,idVal.length);
                applyId.push(idVal);
            })
            $('.isImg1 img').each(function(){
                var idVal = $(this).attr("src");
                var index=idVal.lastIndexOf(",");
                idVal=idVal.substring(index+1,idVal.length);
                applyId2.push(idVal);
            })
            // alert(applyId);
            var name=$('#yname').val();
            var phone=$('#ytel').val();
            var site=$('#demo1').val();
            var sitedetail=$('#xqdz').val();
            var description=$('#sgms').val();
            // alert(name+phone+site+sitedetail+description)
            $.ajax({
                url:"{:url('index/serve/upload')}",
                type:'post',
                data:{
                    name:name,
                    phone:phone,
                    site:site,
                    sitedetail:sitedetail,
                    description:description,
                    img:applyId,
                    imgs:applyId2
                },
                success:function(res){
                    // alert(res);
                    alert('提交成功,请耐心等待~');
                    // location.href = res.url;
                }
            })

10.处理图片和需要存储的数据

	 public function upload(){
	 	$date=input();
	 	$arr='';
	 	$arrs='';
	 	for ($i=0; $i <count($date['img']); $i++) { 
	 		$arr.=($this->Base64StrShangChuan($date['img'][$i])).',';
	 	}
	 	for ($i=0; $i <count($date['imgs']); $i++) { 
	 		$arrs.=($this->Base64StrShangChuan($date['imgs'][$i])).',';
	 	}
	 	$date['img']=$arr;
	 	$date['imgs']=$arrs;
	 	$date['create_time']=time();
	 	// return $date;
	 	if (false==Db::name('serve')->insert($date)) {

	        return $this->error('修改失败');
	        
	    } else {
	    	
 			return 1;
	        // return $this->success('修改成功','index/serve/index');
	    }

    }
       // 保存base64二维码图片
	public function Base64StrShangChuan($image){

		$imageName = "/25220_".date("His",time())."_".rand(1111,9999).'.png';  //图片名称
 
		@define('BASE_PATH',str_replace('\\','/',realpath(dirname(__FILE__).'/../../../'))."/");
 
		$path = BASE_PATH.'/public/images/'.date("Ymd");  //获取文件目录
 
		$return_url = 'images/'.date("Ymd").$imageName;

	    if (!is_dir($path)){     //判断目录是否存在 不存在就创建
	        mkdir($path,0777,true);
	    }
 
		$imageurl =  $path.$imageName;  
 		// dump($imageurl);die();
        // $image = explode(',',$image);   //截取data:image/png;base64, 这个逗号后的字符如果前台传的base64字符串已经截取过,把这一行代码注释调掉就OK

         $is_success = file_put_contents($imageurl,base64_decode($image));   //返回的是字节数 
 
        if($is_success > 0)
        {
        	$img = $return_url;
        	return $img;
        }
        else
        {
        	return false;
        }
 
	}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值