单文件压缩上传

  1. <input type="file" id="file">

构造函数

  1. function UpFileImg(options){
  2. var options = options || {
  3. el:'',
  4. compressSize:640,
  5. datatype:'base64',
  6. success:function(val){}
  7. };
  8. var that = this;
  9.  
  10. // 读取文件
  11. this.setFilesReader = function(file){
  12. var reader = new window.FileReader();
  13. var fileSize = Math.round(file.size/1024/1024);
  14. var that = this;
  15. reader.readAsDataURL(file);
  16. reader.onload = function(e) {
  17. that.compress(this.result,fileSize);
  18. };
  19. };
  20. // 压缩文件
  21. this.compress = function(res, fileSize){
  22. var img = new Image();
  23. var maxW = options.compressSize; //压缩后大小
  24. var that = this;
  25. img.src = res;
  26. img.onload = function () {
  27. var cvs = document.createElement('canvas'), ctx = cvs.getContext('2d');
  28.  
  29. if(img.width > maxW) {
  30. img.height *= maxW / img.width;
  31. img.width = maxW;
  32. }
  33.  
  34. cvs.width = img.width;
  35. cvs.height = img.height;
  36.  
  37. ctx.clearRect(0, 0, cvs.width, cvs.height);
  38. ctx.drawImage(img, 0, 0, img.width, img.height);
  39.  
  40. // 设置压缩比
  41. var compressRate = that.getCompressRate(1,fileSize);
  42.  
  43. // 压缩
  44. var dataUrl = cvs.toDataURL('image/jpeg', compressRate);
  45. if(options.datatype === 'blob'){
  46. var dataUrl = that.dataURItoBlob(dataUrl);
  47. }
  48. // 成功后回调
  49. that.compressCallblak(options.success,dataUrl);
  50. };
  51. };
  52.  
  53. // 压缩后回调函数
  54. this.compressCallblak = function(fun,val){
  55. fun(val);
  56. };
  57.  
  58. // 计算压缩比
  59. this.getCompressRate = function(allowMaxSize,fileSize){
  60. var compressRate = 1;
  61.  
  62. if(fileSize/allowMaxSize > 4){
  63. compressRate = 0.5;
  64. } else if(fileSize/allowMaxSize >3){
  65. compressRate = 0.6;
  66. } else if(fileSize/allowMaxSize >2){
  67. compressRate = 0.7;
  68. } else if(fileSize > allowMaxSize){
  69. compressRate = 0.8;
  70. } else{
  71. compressRate = 0.9;
  72. }
  73. return compressRate;
  74. };
  75.  
  76. //base64转blob
  77. this.dataURItoBlob = function(base64Data){
  78. var byteString;
  79. if (base64Data.split(',')[0].indexOf('base64') >= 0){
  80. byteString = atob(base64Data.split(',')[1]);
  81. }
  82. else{
  83. byteString = unescape(base64Data.split(',')[1]);
  84. }
  85. var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
  86. var ia = new Uint8Array(byteString.length);
  87. for (var i = 0; i < byteString.length; i++) {
  88. ia[i] = byteString.charCodeAt(i);
  89. }
  90. return new Blob([ia], {type:mimeString});
  91. }
  92.  
  93. document.getElementById(options.el).onchange = function (){
  94. var f = this.files[0];
  95. that.setFilesReader(f);
  96. };
  97. };

示例:(转为blob对象后使用ajax上传)

  1. var fileImg = new UpFileImg({
  2. el:'file', //绑定id
  3. compressSize:700, //默认640
  4. datatype:'blob', //默认转换为base64
  5. success:function(data,name){
  6. // 回调
  7. console.log(data);
  8. console.log(name);
  9. var fd = new FormData();
  10.  
  11. // file_key为上传文件后台对应的key也就相当于input的name,
  12. // data为bolo对象,
  13. // name为上传文件的名称
  14. fd.append("file_key", data, name);
  15. $.ajax({
  16. url: '上传地址',
  17. type: 'POST',
  18. data: fd,
  19. processData: false, // 必须
  20. contentType: false, // 必须
  21. dataType: 'json',
  22. success:function(data){
  23. console.log(data);
  24. }
  25. });
  26. }
  27. });
名称 默认值 是否必传 描述
el 对应input的ID
compressSize 640 压缩后最大宽度
datatype base64 回调函数返回值类型,默认返回base64,可以设置为blob,配合ajax进行上传
success 回调函数返回文件名称,与压缩后文件(base64或者blob)

H5单文件压缩插件的更多相关文章

  1. fis入门-单文件编译之文件优化(optimize)

    FIS(Front-end Integrated Solution ),是百度的前端集成解决方案.最近几天在研究前端构建的东西,就顺便了解了下,果断各种高大上,可以到FIS官网围观感受一下.如果对fi ...

  2. 关于ZIP大文件压缩

    实测:4.76 GB一个单文件压缩没有什么问题. import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

  3. java-压缩文件成zip文件(多文件/单文件/多目录/单目录/无目录),用于下载

    本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. http://www.cnblogs.com/king-xg/p/6424788.html 上代码: pac ...

  4. c#自带压缩类实现的多文件压缩和解压

    用c#自带的System.IO.Compression命名空间下的压缩类实现的多文件压缩和解压功能,缺点是多文件压缩包的解压只能调用自身的解压方法,和现有的压缩软件不兼容.下面的代码没有把多文件的目录 ...

  5. 开源作品-PHP写的JS和CSS文件压缩利器(单文件绿色版)-SuMinify_PHP_1_5

    前言: 网站项目需要引用外部文件以减小加载流量,而且第一次加载外部资源文件后,其他同域名的页面如果引用相同的地址,可以利用浏览器缓存直接读取本地缓存资源文件,而不需要每个页面都下载相同的外部资源文件. ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox

    系列目录 https://yunpan.cn/cZVeSJ33XSHKZ  访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...

  7. (6/24) 插件配置:轻松配置JS文件压缩

    实际开发中,在项目上线之前,我们编写的js代码是需要进行压缩的,我们可以采取压缩软件或者在线进行压缩,这不是我们的重点,在webpack中实现JS代码的压缩才是本节的核心. 通过webpack中可实现 ...

  8. QT发布的EXE打包压缩成单文件

    Enigma virtual box 是免费的软件虚拟化工具,它可以将多个文件封装到您的应用程序主文件,这样您的软件就可以制作成为单文件的绿色软件. enigma virtual box 支持所有类型 ...

  9. javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)

    原博客地址:https://blog.csdn.net/weixin_37766296/article/details/80044000 将多个文件压缩并下载下来:(绿色为修改原博客的位置) 注意:需 ...

随机推荐

  1. lintcode_93_平衡二叉树

    平衡二叉树   描述 笔记 数据 评测 给定一个二叉树,确定它是高度平衡的.对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1. 您在真实的面试中是否遇到过 ...

  2. ElasticSearch 集群原理

    节点 一个运行中的EasticSearch 被称为一个节点,而集群是由多个用于拥有相同cluster.name配置的节点组成,它们共同承担数据和负载的压力,当有新的节点加入或移除,集群会重新平均分布所 ...

  3. Pagehelper介绍

    本文引自:https://my.oschina.net/zudajun/blog/745232 摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybat ...

  4. lnamp高性能架构之apache和nginx的整合

    搭建过lamp博友和lnmp的博友们可能对这这两个单词并不陌生,对与apachen,nginx相比都源码或yum安装过,但知道apache的nginx的优点,apache处理动态页面很强,nginx处 ...

  5. <Docker学习>5. docker数据管理

    当我们创建了一个tomcat容器,如何简单部署一个web应用?如何将war包放入到容器中?也就是说怎么样把文件从宿主机中 "放入" 到容器中? docker cp命令可以将宿主机本 ...

  6. Apache安装之后,在浏览器输入ip无法访问

    博主本来在linux下面配置安装了apache,然后用浏览器输入ip却无法访问 就一直在想是不是dns无法解析的问题,最后才发现原来是防火墙的原因, 在linux下面 service iptables ...

  7. McNay Art Museum【McNay艺术博物馆】

    McNay Art Museum When I was 17, I read a magazine artice about a museum called the McNay, once the h ...

  8. POJ 3662 (二分+SPFA

    Telephone Lines Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8856   Accepted: 3211 D ...

  9. Python 文本挖掘:使用情感词典进行情感分析(算法及程序设计)

    出处:http://www.ithao123.cn/content-242299.html 情感分析就是分析一句话说得是很主观还是客观描述,分析这句话表达的是积极的情绪还是消极的情绪.   原理 比如 ...

  10. SQL语句知识点

    PERSON表 NUMBER NAME SEX AGE 1 THERON male 19 2 JACK male 20 3 LUCY female 20 1.SELECT选择     SELECT 列 ...