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 对象、函数和继承
Jul 07 Javascript
IE DOM实现存在的部分问题及解决方法
Jul 25 Javascript
js iframe跨域访问(同主域/非同主域)分别深入介绍
Jan 24 Javascript
jQuery随机密码生成的方法
Mar 09 Javascript
javascript实现随机读取数组的方法
Aug 03 Javascript
JS实现可关闭的对联广告效果代码
Sep 14 Javascript
JS实现黑色大气的二级导航菜单效果
Sep 18 Javascript
详解JavaScript时间格式化
Dec 23 Javascript
JS控制TreeView的结点选择
Nov 11 Javascript
微信小程序radio组件使用详解
Jan 31 Javascript
vue新建项目并配置标准路由过程解析
Dec 09 Javascript
JS出现404错误原理及解决方案
Jul 01 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+Html+缓存
2006/12/20 PHP
PHP 循环列出目录内容的函数代码
2010/05/26 PHP
php正则表达式(regar expression)
2011/09/10 PHP
ThinkPHP路由详解
2015/07/27 PHP
thinkPHP实现的联动菜单功能详解
2017/05/05 PHP
在Laravel中使用GuzzleHttp调用第三方服务的API接口代码
2019/10/15 PHP
splice slice区别
2006/10/09 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
Javascript通过overflow控制列表闭合与展开的方法
2015/05/15 Javascript
JQuery中DOM事件绑定用法详解
2015/06/13 Javascript
jquery实现通用的内容渐显Tab选项卡效果
2015/09/07 Javascript
js弹出对话框方式小结
2015/11/17 Javascript
jQuery弹出窗口简单实现代码
2017/03/09 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
微信小程序实现分页加载效果
2020/11/19 Javascript
PyQt5每天必学之创建窗口居中效果
2018/04/19 Python
python3模块smtplib实现发送邮件功能
2018/05/22 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
简单了解django索引的相关知识
2019/07/17 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
英国知名的皮手套品牌:Dents
2016/11/13 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
如何实现jdbc性能优化
2012/07/30 面试题
杭州-飞时达软件有限公司.net笔面试
2012/04/28 面试题
怎么写有吸引力的自荐信
2013/11/17 职场文书
单位刻章介绍信范文
2014/01/11 职场文书
公司庆典主持词
2015/07/04 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python