js实现图片上传并正常显示


Posted in Javascript onDecember 19, 2015

项目经常会用到头像上传,那么怎么实现呢?

首先是HTML布局:

<label for="thumbnail" class="col-md-3 control-label">缩略图</label>
<div class="col-md-6">
 <input type="file" class="form-control" id="thumbnail" name="thumbnail">
</div>

jquery方式,IE不支持,但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) ;
 }
 return url ;
}

$('#thumbnail').change(function() {
 var eImg = $('<img />');
 eImg.attr('src', getObjectURL($(this)[0].files[0])); // 或 this.files[0] this->input
 $(this).after(eImg);});

js实现图片上传并正常显示

网上找一份可用的代码非常不易,经过不断的筛选总结才得出兼容所有的文件上传显示
HTML布局

<form action='' method='post' name='myform'>
 <input type='file' id='iptfileupload' onchange='show()' value='' />
 <img src='1.jpg' alt='' id='img' />
</form>

JS代码:

<script type="text/javascript">
 function getPath(obj,fileQuery,transImg) {

 var imgSrc = '', imgArr = [], strSrc = '' ;

 if(window.navigator.userAgent.indexOf("MSIE")>=1){ // IE浏览器判断
 if(obj.select){
  obj.select();
  var path=document.selection.createRange().text;
  alert(path) ;
  obj.removeAttribute("src");
  imgSrc = fileQuery.value ;
  imgArr = imgSrc.split('.') ;
  strSrc = imgArr[imgArr.length - 1].toLowerCase() ;
  if(strSrc.localeCompare('jpg') === 0 || strSrc.localeCompare('jpeg') === 0 || strSrc.localeCompare('gif') === 0 || strSrc.localeCompare('png') === 0){
  obj.setAttribute("src",transImg);
  obj.style.filter=
  "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+path+"', sizingMethod='scale');"; // IE通过滤镜的方式实现图片显示
  }else{
  //try{
  throw new Error('File type Error! please image file upload..'); 
  //}catch(e){
  // alert('name: ' + e.name + 'message: ' + e.message) ;
  //}
  }
 }else{
  // alert(fileQuery.value) ;
  imgSrc = fileQuery.value ;
  imgArr = imgSrc.split('.') ;
  strSrc = imgArr[imgArr.length - 1].toLowerCase() ;
  if(strSrc.localeCompare('jpg') === 0 || strSrc.localeCompare('jpeg') === 0 || strSrc.localeCompare('gif') === 0 || strSrc.localeCompare('png') === 0){
  obj.src = fileQuery.value ;
  }else{
  //try{
  throw new Error('File type Error! please image file upload..') ;
  //}catch(e){
  // alert('name: ' + e.name + 'message: ' + e.message) ;
  //}
  }

 }

 } else{
 var file =fileQuery.files[0];
 var reader = new FileReader();
 reader.onload = function(e){

  imgSrc = fileQuery.value ;
  imgArr = imgSrc.split('.') ;
  strSrc = imgArr[imgArr.length - 1].toLowerCase() ;
  if(strSrc.localeCompare('jpg') === 0 || strSrc.localeCompare('jpeg') === 0 || strSrc.localeCompare('gif') === 0 || strSrc.localeCompare('png') === 0){
  obj.setAttribute("src", e.target.result) ;
  }else{
  //try{
  throw new Error('File type Error! please image file upload..') ;
  //}catch(e){
  // alert('name: ' + e.name + 'message: ' + e.message) ;
  //}
  }

  // alert(e.target.result); 
 }
 reader.readAsDataURL(file);
 }
 }

 function show(){
 //以下即为完整客户端路径
 var file_img=document.getElementById("img"),
 iptfileupload = document.getElementById('iptfileupload') ;
 getPath(file_img,iptfileupload,file_img) ;
 }
 </script>

更多精彩内容请参考专题《ajax上传技术汇总》,《javascript文件上传操作汇总》和《jQuery上传操作汇总》进行学习。

希望本文所述对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
得到文本框选中的文字,动态插入文字的js代码
Mar 07 Javascript
JQuery操作tr和td内容的方法实例
Mar 06 Javascript
php与js的区别是什么
Aug 05 Javascript
SeaJS 与 RequireJS 的差异对比
Dec 08 Javascript
javascript获取当前鼠标坐标的方法
Jan 10 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
Dec 03 Javascript
JS实现的RGB网页颜色在线取色器完整实例
Dec 21 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
Apr 02 jQuery
SpringMVC+bootstrap table实例详解
Jun 02 Javascript
JS实现的简单四则运算计算器功能示例
Sep 27 Javascript
iview在vue-cli3如何按需加载的方法
Oct 31 Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 Javascript
thinkphp实现无限分类(使用递归)
Dec 19 #Javascript
15个常用的jquery代码片段
Dec 19 #Javascript
js实现滚动条滚动到页面底部继续加载
Dec 19 #Javascript
jQuery对html元素的取值与赋值实例详解
Dec 18 #Javascript
jQuery打字效果实现方法(附demo源码下载)
Dec 18 #Javascript
jQuery中trigger()与bind()用法分析
Dec 18 #Javascript
jQuery+JSON实现AJAX二级联动实例分析
Dec 18 #Javascript
You might like
PHP中防止SQL注入实现代码
2011/02/19 PHP
PHP面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
php结合安卓客户端实现查询交互实例
2015/05/05 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
js 事件小结 表格区别
2007/08/13 Javascript
jquery 笔记 事件
2011/11/02 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
jQuery选择器源码解读(五):tokenize的解析过程
2015/03/31 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
Python中super()函数简介及用法分享
2016/07/11 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
python实现图片插入文字
2019/11/26 Python
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
医学专业大学生求职的自我评价
2013/11/27 职场文书
简单租房协议书
2014/04/09 职场文书
承租经营合作者协议书
2014/10/01 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
成事在人观后感
2015/06/16 职场文书
学习雷锋主题班会
2015/08/14 职场文书
田径运动会广播稿
2015/08/19 职场文书
任命书格式模板
2015/09/22 职场文书
多人股份制合作协议书
2016/03/19 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers