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 相关文章推荐
extjs DataReader、JsonReader、XmlReader的构造方法
Nov 07 Javascript
基于jquery封装的一个js分页
Nov 15 Javascript
jQuery中的基本选择器用法学习教程
Apr 14 Javascript
jQuery添加和删除输入文本框标签代码
May 20 Javascript
php 修改密码实现代码
May 24 Javascript
Angularjs的$http异步删除数据详解及实例
Jul 27 Javascript
vue实现打印功能的两种方法
Sep 07 Javascript
nuxt.js中间件实现拦截权限判断的方法
Nov 21 Javascript
详解Vue中组件传值的多重实现方式
Aug 16 Javascript
Vue实现boradcast和dispatch的示例
Nov 13 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 Vue.js
吃通javascript正则表达式
Apr 21 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实现的带超时功能get_headers函数
2015/02/10 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
2016/03/18 PHP
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
javascript中递归的两种写法
2017/01/17 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
[01:03:37]Secret vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
Python的网络编程库Gevent的安装及使用技巧
2016/06/24 Python
python 判断矩阵中每行非零个数的方法
2019/01/26 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
Django学习之文件上传与下载
2019/10/06 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
Django nginx配置实现过程详解
2020/09/10 Python
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
运动会标语
2014/06/21 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
消防安全培训工作总结
2015/10/23 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
实现一个简单得数据响应系统
2021/11/11 Javascript