写在前面:这里提供一种解决问题思路,跟什么语言无关,可具体问题具体分析;
这里用到的是PHP,框架是Laravel.
/**
* 1、前端访问页面的时候会请求路径,然后调用路由,请求PHP文件,获取数据之后返回给前端
* 这里使用访问页面的时间作为唯一标识,生成二维码图片
* 二维码图片里面信息包括:
*
* 扫一扫上传图片 - 后端 - 代码
*/
//当前时间 $rs['current']=time(); //二维码保存地址 $PNG_WEB_DIR = 'uploads/qr/'; //加载二维码生成类 include "phpqrcode/qrlib.php"; //设置二维码容错等级 $errorCorrectionLevel = 'H'; //生成图片的大小 $matrixPointSize = 4; //扫描二维码访问的地址 - 带上当前访问时间作为唯一标识 $data='http://'.$_SERVER['HTTP_HOST'].'/qr-upload?time='.$rs['current']; //生成二维码文件 // uploads/qr/sfwer9234-98252-359-235.png $filename = $PNG_WEB_DIR.md5($data.'|'.$errorCorrectionLevel.'|'.$matrixPointSize).'.png'; // php 生成二维码类: // 参数介绍: // 第1个参数$text:二维码包含的内容,可以是链接、文字、json字符串等等; // 第2个参数$outfile:默认为false,不生成文件,只将二维码图片返回输出;否则需要给出存放生成二维码图片的文件名及路径; // 第3个参数$level:默认为L,这个参数可传递的值分别是L(QR_ECLEVEL_L,7%)、M(QR_ECLEVEL_M,15%)、Q(QR_ECLEVEL_Q,25%)、H(QR_ECLEVEL_H,30%)这个参数控制二维码容错率,不同的参数表示二维码可被覆盖的区域百分比,也就是被覆盖的区域还能识别; // 第4个参数$size:控制生成图片的大小,默认为4; // 第5个参数$margin:控制生成二维码的空白区域大小; // 第6个参数$saveandprint:保存二维码图片并显示出来,$outfile必须传递图片路径; QRcode::png($data, $filename, $errorCorrectionLevel, $matrixPointSize, 2); //二维码输出路径,获取二维码给前端进行展示 $rs['qr_img']=HTML::image($PNG_WEB_DIR.basename($filename));
/**
* 2、拿到后端返回的数据进行输出绑定
* 前端代码
*/
<div role="tabpanel" class="tab-pane active text-center qr-img" id="p1">
<p>
{{$qr_img}} //展示二维码 - 一张图片
<span>扫描左侧二维码即可上传照片</span>
</p>
//当前访问地址的时间,由后台返回 - 后续用来查图片进行展示
<span class="btn btn-info ae-uploaded" data-biaoshi="{{$current or ''}}">我已上传图片</span>
</div>
/**
* 3、手机扫码进行上传操作
* 扫码之后跳转到H5页面,进行上传图片
* 扫码:
* 后端代码:
*/
$rs['time']=Input::get('time'); //获取前端传过来的时间进行过期判断,如果过期返回错误提示
/**
* 4、前端绑定后端传过来的数据,进行展示
* 在这里进行上传图片操作,上传之后返回图片地址;
* 前端代码:
*/
{{Form::open(['url'=>URL::current(),'enctype'=>'multipart/form-data','id'=>'cdc'])}}
<div class="container">
<div class="row text-center">
<div class="col-md-12">
<div id="queue" class="ht30" style="display:none;"></div>
</div>
<div class="col-md-12 mt10">
<div class="db bgwh ht200 p-plus" id="i1">身份证正面</div>
<input type="file" id="s1" class="btn btn-primary btn-lg mt10 whp100">
<span class="msg-box" for="h1"></span>
</div>
<div class="col-md-12 mt10">
<div class="db bgwh ht200 p-plus" id="i2">身份证背面</div>
<input type="file" id="s2" class="btn btn-primary btn-lg mt10 whp100">
<span class="msg-box" for="h2"></span>
</div>
<div class="col-md-12 mt10">
<div class="db bgwh ht200 p-plus" id="i3">手持正面</div>
<input type="file" id="s3" class="btn btn-primary btn-lg mt10 whp100">
<span class="msg-box" for="h3"></span>
</div>
{{Form::hidden('biaoshi',$time)}}
<input type="hidden" name="h1" data-rule="required;">
<input type="hidden" name="h2" data-rule="required;">
<input type="hidden" name="h3" data-rule="required;">
<div class="col-md-12 mt20 ">
<button class="btn btn-danger btn-lg whp100">上 传</button>
</div>
</div>
</div>
{{Form::close()}}
$("#s1").UploadImg({
url : "/qr-upload.php",
width : "640",
quality : "0.7", //压缩率,默认值为0.7
mixsize : "10000000",
before : function(blob){
$("#i1").html(hh);
},
error : function(d){
$("#i1").html('上传失败请重新上传');
},
success : function(d){
$("#i1").html('<img class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="/'+d+'" class="img-responsive bim">');
$("input[name='h1']").val("/"+d);
}
});
//剩余两个省略........
/**
* 5、上传之后进行保存到数据库:
* 数据库字段:pic1,pic2,pic3,unique-id(浏览页面的时间戳,进行唯一标识处理)
* 这里保存到数据库的是上一步上传之后返回的图片地址:
* 保存成功之后跳转到上传成功页面:
* 代码如下:
*/
public function qrpost(){
$input=Input::all();
$arr['pic1']=$input['h1'];
$arr['pic2']=$input['h2'];
$arr['pic3']=$input['h3'];
$arr['biaoshi']=$input['biaoshi'];
Lice::create($arr);
return Redirect::to('/qrok');
}
/**
* 6、保存到数据库之后(上传成功之后),PC浏览器点击按钮“我已上传图片”,AJAX拿着上面第二步前端绑定的时间值,去查出来刚上传的图片:
* 前端代码:
*/
$(".ae-uploaded").click(function () {
var biaoshi = $(this).attr("data-biaoshi"); //这里获取的"attr"就是时间唯一标识
var str;
$.ajax({
type: "post",
dataType: "json",
data: {"biaoshi": biaoshi},
url: "/qr-fetch",
success: function (d) {
if(d.flag) {
str = '<img style="height:127px" class="img-responsive ml10" class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="' + d.file.pic1 + '">';
str += '<img style="height:127px" class="img-responsive ml10" class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="' + d.file.pic2 + '">';
str += '<img style="height:127px" class="img-responsive ml10" class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="' + d.file.pic3 + '">';
$(".qr-img").html(str);
$("input[name='package[pic1]']").val(d.file.pic1);
$("input[name='package[pic2]']").val(d.file.pic2);
$("input[name='package[pic3]']").val(d.file.pic3);
$(".uploaded").hide();
}else {
alert("上传失败,请重新在手机上传");
}
}
});
});
//后端代码
public function qrfetch(){
$biaoshi=Input::get('biaoshi');
$info=Lice::where('biaoshi',$biaoshi)->select('pic1','pic2','pic3')->first();
if($info){
return Response::json(['flag'=>true,'file'=>$info]);
}else{
return Response::json(['flag'=>false]);
}
}
/**
* 7、PC得到上传之后的图片地址,进行展示,然后可进行接下来的操作,把图片和当前用户绑定起来即可,具体要看业务怎么实现了
* 这里只是说明一下上传之后展示和当前PC登录的用户如何绑定,自己可去实现
*/
共同学习,写下你的评论
评论加载中...
作者其他优质文章