手机端上传图片,手机上传图片即时浏览,HTML5 图片上传(pc ,手机都能适配)
2022-05-31PHP
该代码可实现电脑、手机以及微信端图片上传,可即时进行浏览,图片上传后返回图片路径
该代码可实现电脑、手机以及微信端图片上传,可即时进行浏览,图片上传后返回图片路径
一、我们先来看看效果图
二、前端HTML5代码——index.html
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <link rel="stylesheet" type="text/css" href="./css/reset.css" /> <link rel="stylesheet" type="text/css" href="./css/icon.css" /> <link rel="stylesheet" type="text/css" href="./css/public.css" /> <link rel="stylesheet" type="text/css" href="./css/custom.css" /> <link rel="stylesheet" type="text/css" href="./css/layout.css" /> <title>上传图片</title> <style type="text/css"> .info-wrapper { padding: 0 15px; padding-bottom: 40px; min-height: 100%; -webkit-box-sizing: border-box; box-sizing: border-box; } .info-wrapper .input-wrap { position: relative; padding: 20px 0; border-bottom: 1px solid #e8e8e8; } .info-wrapper .input-wrap.select .icon { position: absolute; right: 0; top: 50px; } .info-wrapper .input-wrap .text { font-weight: 700; } .info-wrapper .input-wrap .text em { margin-left: 8px; font-size: 12px; color: #e64340; } .info-wrapper .input-wrap .input { position: relative; width: 100%; padding-top: 20px; margin-top: 0; border: none; background-color: transparent; z-index: 2; } .info-wrapper .input-wrap.code .btn { position: absolute; top: -5px; width: auto; line-height: 1; right: 0; margin: 0; padding: 5px 10px; margin-top: 20px; background-color: transparent; color: #333; font-size: 14px; font-weight: 700; } .info-wrapper .input-wrap .arrow { position: absolute; right: 0; top: 54px; font-size: 15px; } .info-wrapper .tips { position: relative; margin-top: 10px; margin-bottom: 30px; padding-left: 20px; line-height: 18px; color: #f96e53; } .info-wrapper .tips .icon { display: inline-block; position: absolute; left: 0; width: 16px; height: 16px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAEFklEQVR4Xu2aUVZaMRBAZ/KOPP9qV1C6guoK1BUUof/qf3niCtQVyAH/xf9CcQXSFdSuoHQFxT+g52V68oAeqmCSlwkiPL445yWZzM3MZDIJwpr/cM31hwxAZgFrTiBzgTU3gCwIZi6wKBcYVgrbUga7gigvAbdnyUWkDgH2QhHfYrXdXcTcvFqAUppicQIIBQDcslGIgLqCoA2BvMlV2/c2fW3aegEwjEqHBFABgJkrbTNB1ZYIOgHhxcbVl45tX117VgCJmcfBJSLs6QSn+k7QzgXxKad7sAEYRMUzADxPpZhVJ+ohwWmu3mpYdZvT2BkAVQpbwzi4Hvn5An9EjbDeOnaV6AQgUV4Gd1y+bq0MUSMXSOUSPeu+4w6pAby48hONHS0hNYB+uXTnLdjZLqcDhFQABlHxHADPbOf5uD0RfUOALUD84DoWEh2nCYzWAJLkRgbfXSdMRKeb9VZVjcMDlHo5IXdst0hrAIOopJR3TnDCWvOf7D+fP+1JQSqYuv0I2mG9eWAziBWAYbl4RIjXNgLmtfUCAACExH2bjNEKQD8q/kTA/DIDUGnzZr25bzpHYwCDz6UCCPhqOrCunS8LUHJzIn5vGgvMAUQllXoe6hQz/e4TAABdhLWWUVpuAaD42/ZI+xwMvwDgPqw1d0wWwwgAW5SempFnAMoN3pqkyEYAePbp/9fDNwCQcBBeNds6KzAEwOv/alLeARjGASMA/XKxg4i7Opo23/0DgJuw1jzSzWllAahzxma9pa1MGQEYRCXSkbT97tsCMgCcFvAaYwCrBfgAMJ2u+sgzABiD4IA5DU7ixbiep/76qSuapcOGQZCnAmQbKJ3acyZCnkzUST9dZ9ZUWAkblEs9QHijE2z+nS5QyCRVJRmok9tH876alkQ/wnrLqGpl5AIJAN448CRL4w20Zv6v9DIHwFkQmeGfnAcuLwURRatfLnYR8Z2rqU5XhCdjDaNSlQBOGMY2SoEncowtINmumIqi6u4/FHJ/UrYaldrFHUfBxWtRdGwFTCdD6gHh6L6f72L1Nqw1rS5prSwgsQKmixFXU3/Sn+AhF8R5kyrQdF9rAKMdYQkTI8PE5zG4VADG26Law/n2bjeTMCp+zBKRGsDoYYTocFxsuuluduiZJyM1gCSDe3kINzkRV2z93jkGTA8wfiihLk0W7Q6pzZ4VwGSwfrlYQcRLR3PWdyd4QKBKmrcArDFg1mCjZ3Kiyl1BnpJ1OzZ5tlekTjFg3nKpjFECHHGBUOWtgMS5zbW33pRGLbwAmAgfJ00VICjYHqWJ6JdAbIOIG6/uqewz7rEnEPOSaM5jaeggQXcjkB3T623TlfayDboKX4b+Xl1gGRTUzSEDoCO06t8zC1j1Fdbpl1mAjtCqf197C/gL/XEHX9ywz5cAAAAASUVORK5CYII=) no-repeat; background-size: 100% 100%; } .info-wrapper .input-wrap .pic-wrap { margin: 0 -10px; } .info-wrapper .input-wrap .pic-wrap .list { padding: 5px; font-size: 0; } .info-wrapper .input-wrap .pic-wrap .list .item { display: inline-block; width: 33.333%; -webkit-box-sizing: border-box; box-sizing: border-box; padding: 5px; font-size: 14px; } .info-wrapper .input-wrap .pic-wrap .list .img-wrap { position: relative; width: 100%; padding-bottom: 100%; } .info-wrapper .input-wrap .pic-wrap .list .img-wrap .img { position: absolute; left: 0; top: 0; width: 100%; height: 100%; } .info-wrapper .input-wrap .pic-wrap .list .img-wrap .file { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; } .info-wrapper .input-wrap .pic-wrap .list .img-wrap .close { display: block; position: absolute; width: 15px; height: 15px; right: 5px; top: 5px; background: url(data:image/png;base64,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) no-repeat; background-size: 100% 100%; } </style> </head> <body> <div class="page bgf"> <div class="info-wrapper"> <div class="form"> <div class="input-wrap"> <div class="text">预签保费<em>*</em></div> <div class="pic-wrap"> <ul id="piclist" class="list"> <li class="item upload"> <div class="img-wrap"> <img class="img" src="./img/upload.png" /> <input id="upload" class="file" type="file" value="" accept="image/*" /> </div> </li> </ul> </div> </div> <div class="input-wrap"> <a id="submit" href="javascript:;" class="btn btn-primary" style="margin-top: 30px;">确定提交</a> </div> </div> </div> </div> <script id="tpl_upload" type="text/html"> <li class="item"> <div class="img-wrap"> <img class="img" src="{{src}}" /> <span class="close expand"></span> </div> </li> </script> <script src="./js/jquery.min.js"></script> <script src="./js/tools.js"></script> <script type="text/javascript"> $(function() { var thumb = ''; var upload_url = 'http://test.whmblog.cn/upload.php'; var $upload = $('#upload'), $piclist = $('#piclist'); $('#submit').click(function() { if(thumb!=''){ $.ajax({ type: "POST", url: upload_url, data: { thumb: thumb }, dataType: "json", success: function(res){ Tools.toast(res.result.message); } }); }else{ Tools.toast('请上传图片'); } }); $upload.change(function() { var fileSize = 10 * 1024 * 1024; var files = this.files[0]; var _this = this; if(!/\.(gif|png|jpeg|JPEG|jpg|GIF|PNG|JPG)$/.test(files.name)) { alert('请从相册选择图片或者直接拍照上传'); source.value = ""; return false; } if(files.size > fileSize) { t.alert({ msg: '照片过大,请上传10M以下的照片', icon: true }); return false; } var reader = new FileReader(); reader.readAsDataURL(files); reader.onload = function(e) { thumb = this.result; var _html = $('#tpl_upload').html().replace('{{src}}', this.result); $(_this).parents('.item').before($(_html)); $(_this).parents('.item').hide(); } }); $piclist.delegate('.close', 'click', function() { $(this).parents('.item').remove(); $("#piclist").find('.upload').show(); thumb = ''; }) }) </script> </body> </html>
三、php图片上传代码 ——upload.php
<?php if(empty($_POST['thumb'])){ show_json(0, '图片不能为空!'); } $path = '/upload/'.date('Y').'/'.date('m').'/'.date('d').'/'; $_root_path = $_SERVER["DOCUMENT_ROOT"].$path; if(!is_dir($_root_path))// 如果文件上传目录不存在 { mkdir($_root_path, 0777, true); } $thumb = ''; $ret = createBase64($_POST['thumb'],$_root_path,time().mt_rand(100000,999999)); if($ret['state']!==1) { show_json(0, $ret['err']); exit; } else { $thumb = getCurrentServerName().$path.$ret['filename']; show_json(1, array('img_url'=>$thumb,'message'=>'上传图片成功')); } /* * Base64生成图片文件,自动解析格式 */ function createBase64($base64, $path, $filename) { $resinfo = array(); //匹配base64字符串格式 if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64, $result)) { //保存最终的图片格式 $postfix = $result[2]; $base64 = base64_decode(substr(strstr($base64, ','), 1)); $filename = $filename . '.' . $postfix; $path = $path . $filename; //创建图片 if (file_put_contents($path, $base64)) { $resinfo['state'] = 1; $resinfo['filename'] = $filename; } else { $resinfo['state'] = 2; $resinfo['err'] = 'Create img failed!'; } } else { $resinfo['state'] = 2; $resinfo['err'] = 'Not base64 char!'; } return $resinfo; } function show_json($status = 1, $return = NULL) { $ret = array('status' => $status); if (!is_array($return)) { if ($return) { $ret['result']['message'] = $return; } exit(json_encode($ret)); } else { $ret['result'] = $return; } exit(json_encode($ret)); } // 说明:获取当前页面的带http/https的域名 function getCurrentServerName() { $pageURL = 'http'; if (!empty($_SERVER['HTTPS'])) {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"]; } else { $pageURL .= $_SERVER["SERVER_NAME"]; } return $pageURL; }
四、完整代码下载
很赞哦! ()