图片上传 图片控件异步 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个控件的样式很难改变,大多数做法都是隐藏这个控制,用其它的元素的点击事件触发文件上传,异步上传大多数用的也是iframe,其它方法有待你进一步发现 1.控件样式不好改,并不是所有浏览器都支持。现在的做法是在file控件上,用绝对定位absolute定义一个div遮挡file控件实现。可参考我下面的例子。2.异步上传如果不用兼容IE6,7,8,可以用html5获取图片的base64编码,再用ajax post到服务器。如果需要兼容IE6,7,8就只能iframe或flash实现。html5异步上传图片例子:<!DOCTYPE HTML PUBLIC> <html> <head> <meta charset="utf-8"> <script src="//code.jquery.com/jquery-1.11.0.min.js"></script> <title>图片异步上传,不使用iframe</title> <style type="text/css"> body{margin: 0px; background:#f2f2f0;} p{margin:0px;} .title{color:#FFFF00; background:#000000; text-align:center; font-size:24px; line-height:50px; font-weight:bold;} .file{position:absolute; width:100%; font-size:90px;} .filebtn{display:block; position:relative; height:110px; color:#FFFFFF; background:#06980e; font-size:48px; line-height:110px; text-align:center; cursor:pointer; border: 3px solid #cccccc;} .filebtn:hover{background:#04bc0d;} .showimg{margin:10px auto 10px auto; text-align:center;} </style> <script type="text/javascript"> window.onload = function(){ var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); document.getElementById('img').onchange = function(){ var img = event.target.files[0]; if(!img){ return ; } if(!(img.type.indexOf('image')==0 && img.type && /\.(?:jpg|png|gif)$/.test(img.name)) ){ alert('图片只能是jpg,gif,png'); return ; } var reader = new FileReader(); reader.readAsDataURL(img); reader.onload = function(e){ // reader onload start // ajax 上传图片 $.post("server.php", { img: e.target.result},function(ret){ if(ret.img!=''){ alert('upload success'); $('#showimg').html('<img src="' + ret.img + '">'); }else{ alert('upload fail'); } },'json'); } } } </script> </head> <body> <p class="title">图片异步上传,不使用iframe</p> <p><input type="file" class="file" id="img"><label class="filebtn" for="img" title="JPG,GIF,PNG">请选择图片</label></p> <p class="showimg" id="showimg"></p> </body> </html>server.php<?php$img = isset($_POST['img'])? $_POST['img'] : '';list($type, $data) = explode(',', $img);if(strstr($type,'jpeg')!==''){ $ext = '.jpg';}elseif(strstr($type,'gif')!==''){ $ext = '.gif';}elseif(strstr($type,'png')!==''){ $ext = '.png';}$file = time().$ext;file_put_contents($file, base64_decode($data), true);$ret = array('img'=>$file);echo json_encode($ret);?> ask:更快的匹配数组内容 咋写来着.. IP地址和网址,用什么方法判断效率最高? 已经安装Zend .但是还是提示Attention: Zend Optimizer not Installed 听说php每次为新打开的窗口分配一个SID? php中弹出对话框时如何保留原来的页面显示(对话框的弹出用Js实现)? 求助phpcms 批量提取内容到描述 乱码 关于正则表达式的问题!急,在线等! 紧急提问在线等!关于页面乱码的问题! 做过网站后台管理系统的兄弟请进来看看!! 简单的代码,意想不到的结果. php 验证码生成图片无法显示 求助!判断字符串是否包含的正则或算法!
2.异步上传如果不用兼容IE6,7,8,可以用html5获取图片的base64编码,再用ajax post到服务器。如果需要兼容IE6,7,8就只能iframe或flash实现。html5异步上传图片例子:<!DOCTYPE HTML PUBLIC>
<html>
<head>
<meta charset="utf-8">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<title>图片异步上传,不使用iframe</title>
<style type="text/css">
body{margin: 0px; background:#f2f2f0;}
p{margin:0px;}
.title{color:#FFFF00; background:#000000; text-align:center; font-size:24px; line-height:50px; font-weight:bold;}
.file{position:absolute; width:100%; font-size:90px;}
.filebtn{display:block; position:relative; height:110px; color:#FFFFFF; background:#06980e; font-size:48px; line-height:110px; text-align:center; cursor:pointer; border: 3px solid #cccccc;}
.filebtn:hover{background:#04bc0d;}
.showimg{margin:10px auto 10px auto; text-align:center;}
</style>
<script type="text/javascript">
window.onload = function(){
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
document.getElementById('img').onchange = function(){
var img = event.target.files[0];
if(!img){
return ;
}
if(!(img.type.indexOf('image')==0 && img.type && /\.(?:jpg|png|gif)$/.test(img.name)) ){
alert('图片只能是jpg,gif,png');
return ;
}
var reader = new FileReader();
reader.readAsDataURL(img);
reader.onload = function(e){ // reader onload start
// ajax 上传图片
$.post("server.php", { img: e.target.result},function(ret){
if(ret.img!=''){
alert('upload success');
$('#showimg').html('<img src="' + ret.img + '">');
}else{
alert('upload fail');
}
},'json'); }
}
}
</script>
</head>
<body>
<p class="title">图片异步上传,不使用iframe</p>
<p><input type="file" class="file" id="img"><label class="filebtn" for="img" title="JPG,GIF,PNG">请选择图片</label></p>
<p class="showimg" id="showimg"></p>
</body>
</html>
server.php<?php
$img = isset($_POST['img'])? $_POST['img'] : '';
list($type, $data) = explode(',', $img);
if(strstr($type,'jpeg')!==''){
$ext = '.jpg';
}elseif(strstr($type,'gif')!==''){
$ext = '.gif';
}elseif(strstr($type,'png')!==''){
$ext = '.png';
}
$file = time().$ext;file_put_contents($file, base64_decode($data), true);$ret = array('img'=>$file);
echo json_encode($ret);
?>