需要用户上传头像,开始用kendo ui 的upload,但是样式不知如何修改,并且没有预览功能,于是上网搜资料。最终用的是form表单通过隐藏的iframe实现无刷新上传图片。<参考:http://www.cnblogs.com/devin87/p/web-uploader.html中的传统上传,里面也有HTML5 实现文件上传>,使用HTML5 实现图片预览<参考:http://itindex.net/detail/44612-%E4%B8%8A%E4%BC%A0-%E5%9B%BE%E7%89%87>
文件上传:
<span style="font-size:12px;"><div class="file-box">HTML5中的文件上传还没有看%>_<%
<!-- 通过将 form 的 target 指向 iframe 的 name 来实现无刷新上传 -->
<form action="${saveUrl}" target="channel" method="POST" enctype="multipart/form-data">
<input type="file" class="file" name="fileField" id="fileField" />
<input type="submit" class="btn" value="上传" />
</form>
</div>
<iframe src="" name="channel" style="display:none" id="channel"></iframe></span>
图片预览:
<span style="font-size:12px;"><script type="text/javascript">但是<input type="file"> 控件样式需要修改。
$(function(){
$("input[type='file']").change(function(evt){
var files = evt.target.files;
for (var i = 0, f; f = files[i]; i++) {
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
$("#list img").attr("src",e.target.result); //预览图片的位置
};
})(f);
reader.readAsDataURL(f);
}
});
})
</script> </span>
用一个text和一个button来显示这个file的样式。把之前的按钮透明度opacity设置为0,然后把它放在父标签内,比如外层用div 包裹,通过position:absolute 来覆盖
<span style="font-size:12px;"> <input type='text' name='textfield' id='textfield' class='txt' />修改过样式的可以预览的代码:
<input type='button' class='btn' value='浏览...' /></span>
<span style="font-size:12px;"><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title><style>.file-box{ position:relative;width:370px;}.txt{ height:27px; border:1px solid #cdcdcd; width:158.1px;border-radius: 5px 5px 5px 5px;}.btn{ background-color:#FFF; border:1px solid #CDCDCD;height:26px; width:60px;border-radius: 5px 5px 5px 5px;}.file{ position:absolute; top:0; right:80px; height:26px; filter:alpha(opacity:0);opacity: 0;width:260px } </style></head><body><div class="file-box"><!-- 通过将 form 的 target 指向 iframe 的 name 来实现无刷新上传 --><form action="${saveUrl}" target="channel" method="POST" enctype="multipart/form-data"> <input type='text' name='textfield' id='textfield' class='txt' /> <input type='button' class='btn' value='浏览...' /><input type="file" class="file" name="fileField" id="fileField" onchange="document.getElementById('textfield').value=this.value" /><input type="submit" class="btn" value="上传" /></form></div> <iframe src="" name="channel" style="display:none" id="channel"></iframe> <script type="text/javascript"> $(function(){ $("input[type='file']").change(function(evt){ var files = evt.target.files; for (var i = 0, f; f = files[i]; i++) { if (!f.type.match('image.*')) { continue; } var reader = new FileReader(); reader.onload = (function(theFile) { return function(e) { $("#list img").attr("src",e.target.result); //预览图片的位置 }; })(f); reader.readAsDataURL(f); } }); }) </script> </body></html></span>其中border-radius 是圆角化。