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 相关文章推荐
基于jquery的合并table相同单元格的插件(精简版)
Apr 05 Javascript
关于js注册事件的常用方法
Apr 03 Javascript
浅谈javascript中自定义模版
Jan 29 Javascript
js实现汉字排序的方法
Jul 23 Javascript
详解Bootstrap创建表单的三种格式(一)
Jan 04 Javascript
最全的Javascript编码规范(推荐)
Jun 22 Javascript
JavaScript中原型链存在的问题解析
Sep 25 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
Nov 16 Javascript
Vue.JS入门教程之列表渲染
Dec 01 Javascript
详解create-react-app 自定义 eslint 配置
Jun 07 Javascript
vue生成文件本地打开查看效果的实例
Sep 06 Javascript
JS实现提示框跟随鼠标移动
Aug 27 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使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
javascript 实现父窗口引用弹出窗口的值的脚本
2007/08/07 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
javascript面向对象之共享成员属性与方法及prototype关键字用法
2015/01/13 Javascript
jQuery选择器源码解读(八):addCombinator函数
2015/03/31 Javascript
浅谈setTimeout 与 setInterval
2015/06/23 Javascript
js获取时间函数及扩展函数的方法
2016/10/30 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python之eval()函数危险性浅析
2014/07/03 Python
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
Python实现身份证号码解析
2015/09/01 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
详解Python with/as使用说明
2018/12/13 Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
2019/08/06 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
父亲的菜园教学反思
2014/02/13 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
给校长的一封检讨书
2014/09/20 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
业务员岗位职责
2015/02/03 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书