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 相关文章推荐
JavaScript 判断浏览器类型及版本
Feb 21 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
May 14 Javascript
node.js中的fs.truncateSync方法使用说明
Dec 15 Javascript
jQuery实现“扫码阅读”功能
Jan 21 Javascript
浅谈jQuery中的事件
Mar 23 Javascript
JavaScript手机振动API
Jun 11 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
Apr 21 Javascript
vue项目中使用Hbuilder打包app 设置沉浸式状态栏的方法
Oct 22 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
Dec 13 Javascript
vue点击当前路由高亮小案例
Sep 26 Javascript
react MPA 多页配置详解
Oct 18 Javascript
vue 实现上传组件
May 31 Vue.js
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
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
11个PHPer必须要了解的编程规范
2014/09/22 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
JavaScript 学习技巧
2010/02/17 Javascript
VBS通过WMI监视注册表变动的代码
2011/10/27 Javascript
jQuery操作Select的Option上下移动及移除添加等等
2013/11/18 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
Node.js编码规范
2014/07/14 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
浅谈vue websocket nodeJS 进行实时通信踩到的坑
2020/09/22 NodeJs
[08:44]和酒神一起战斗 DOTA2教你做大人
2014/03/27 DOTA
python3.0 字典key排序
2008/12/24 Python
Python 列表(List)操作方法详解
2014/03/11 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
python简单实现操作Mysql数据库
2018/01/29 Python
Python基于execjs运行js过程解析
2020/11/27 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
HTML5之消息通知的使用(Web Notification)
2018/10/30 HTML / CSS
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
自查自纠工作情况报告
2014/10/29 职场文书
导游词欢迎词
2015/02/02 职场文书
工作会议简报
2015/07/20 职场文书
《角的度量》教学反思
2016/02/18 职场文书