JS实现异步上传压缩图片


Posted in Javascript onApril 22, 2017

摘要: 使用iframe来处理异步上传图片,在现在这个时代来说,多多少少都有点落后了!单单就凭AJAX和JS就不能做到异步上传图片了吗?

感谢 think2011 这位兄台的JS库:https://github.com/think2011/LocalResizeIMG

先看调用页面:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no">
    <script type="text/javascript" src="./js/lrz.mobile.min.js"></script>
    <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
</head>
<body class="upload">
<form id="form">
    <div id="img_show"></div>
    <div id="upload">
      <div id="img_file"><input type="file" accept="image/*" ><div class="btn">选择图片</div></div>
    </div>
    <input type="submit" class="tijiao" value="提交">
  </form>
</body>

<script type="text/javascript">
  var img;
  $("input:file").change(function (){
    //console.log(this.files[0]);
    lrz(this.files[0],{width:640,quality:0.9},function(rst){
      img = rst.base64;
      var html = [];
      var show_img = new Image();
      show_img.src = rst.base64;
      $("#img_show").html("<div class='upimg'></div>");
      $(".upimg").html(show_img);
    });
  });
  $("#form").submit(function (){
    var phone = $("input[name='phone']").val();
    var month = $("input[name='month']").val();
    $.post("upload.php",{img:img,phone:phone,month:month},function(data){
      img = null;
      alert(data.msg);
    },'json');
    return false;
  });
</script>
</html>

1.首先你要载入JS类库:

<script type="text/javascript" src="./js/lrz.mobile.min.js"></script>

2.然后就是写好form

3.准备处理图片以及图片异步提交的JS。

<script type="text/javascript">
  var img;
  $("input:file").change(function (){
    //console.log(this.files[0]);
    lrz(this.files[0],{width:640,quality:0.9},function(rst){
      img = rst.base64;
      var html = [];
      var show_img = new Image();
      show_img.src = rst.base64;
      $("#img_show").html("<div class='upimg'></div>");
      $(".upimg").html(show_img);
    });
  });
  $("#form").submit(function (){
    var phone = $("input[name='phone']").val();
    var month = $("input[name='month']").val();
    $.post("upload.php",{img:img},function(data){
      img = null;
      alert(data.msg);
    },'json');
    return false;
  });
</script>

从代码中可以看出,这个JS库是把图片转成码,然后用变量存起来,然后在用异步POST到服务器中在处理。

看起来貌似没有什么特别的地方,的确实在也没有什么特别的地方.......

后台处理程序PHP:

function error($msg=''){
  $return = array('msg'=>$msg);
  echo json_encode($return);
  exit();
}

function main(){
  if(!$_POST['img']){
    error('请上传图片!');
  }
  
  $img = $_POST['img'];
  
  $path = './upload/';
  
  $type_limit = array('jpg','jpeg','png');

  if(preg_match('/data:\s*image\/(\w+);base64,/iu',$img,$tmp)){
    if(!in_array($tmp[1],$type_limit)){
      error('图片格式不正确,只支持jpg,jpeg,png!');
    }
  }else{
    error('抱歉!上传失败,请重新再试!');
  }
  
  $img = str_replace(' ','+',$img);
  
  $img = str_replace($tmp[0], '', $img);

  $img = base64_decode($img);
  
  $file = $path.time().'.'.$tmp[1];
  if(!file_put_contents($file,$img)){
    error('上传图片失败!');
  }else{
    error('恭喜您!上传成功!');
  }
}
main();

上述代码如果有错误欢迎指出。

如上诉代码,正如你看到的那样,经过BASE64加密过的图片码经过JS异步的POST过来后端后,我们要把代码还原。但是JS库加密的时候会带有一些标签,所以还原前需要处理掉这些本来不属于图片的东西。

$img = str_replace(' ','+',$img);  
$img = str_replace($tmp[0], '', $img);
$img = base64_decode($img);

最后把代码塞进文件,设置好相应的文件名和扩展名,图片就成功上传到了服务器了。

注意:

前后端包括JS编码要要一致,建议UTF-8

如果图片还原不会来的话,那肯定是数据问题,打印POST过来的图片码出来看看。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
filemanage功能中用到的lib.js
Apr 08 Javascript
用JS剩余字数计算的代码
Jul 03 Javascript
jquery focus(fn),blur(fn)方法实例代码
Dec 16 Javascript
jQuery实现鼠标移到元素上动态提示消息框效果
Oct 20 Javascript
学习JavaScript设计模式(多态)
Nov 25 Javascript
微信小程序  简单实例(阅读器)的实例开发
Sep 29 Javascript
javascript淘宝主图放大镜功能
Oct 20 Javascript
vuejs父子组件通信的问题
Jan 11 Javascript
JS中的作用域链
Mar 01 Javascript
Node.js中流(stream)的使用方法示例
Jul 16 Javascript
jQuery实现的上拉刷新功能组件示例
May 01 jQuery
JS实现简易图片自动轮播
Oct 16 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
Apr 22 #Javascript
Vue form 表单提交+ajax异步请求+分页效果
Apr 22 #Javascript
详解Vue 事件驱动和依赖追踪
Apr 22 #Javascript
JS使用cookie实现只出现一次的广告代码效果
Apr 22 #Javascript
利用JS实现简单的瀑布流加载图片效果
Apr 22 #Javascript
jQuery实现百度登录框的动态切换效果
Apr 21 #jQuery
HTML5+Canvas调用手机拍照功能实现图片上传(下)
Apr 21 #Javascript
You might like
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
2007/01/22 Javascript
JS 有名函数表达式全面解析
2010/03/19 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
Vue+elementUI实现多图片上传与回显功能(含回显后继续上传或删除)
2020/03/23 Javascript
js实现九宫格布局效果
2020/05/28 Javascript
JS实现鼠标移动拖尾
2020/12/27 Javascript
python列出目录下指定文件与子目录的方法
2015/07/03 Python
Python实现批量转换文件编码的方法
2015/07/28 Python
利用python循环创建多个文件的方法
2018/10/25 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
简单html5代码获取地理位置
2014/03/31 HTML / CSS
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
美国奢侈品购物平台:Orchard Mile
2018/05/02 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
办护照工作证明范本
2014/01/14 职场文书
质量月活动策划方案
2014/03/10 职场文书
导师推荐信范文
2014/05/09 职场文书
民事授权委托书范文
2014/08/02 职场文书
大学生助学金感谢信
2015/01/21 职场文书
财务人员岗位职责
2015/02/03 职场文书
稽核岗位职责范本
2015/04/13 职场文书
请客吃饭开场白
2015/06/01 职场文书
信用卡收入证明范本
2015/06/12 职场文书
MySQL系列之四 SQL语法
2021/07/02 MySQL