H5单文件压缩插件
单文件压缩上传
- <input type="file" id="file">
构造函数
- function UpFileImg(options){
- var options = options || {
- el:'',
- compressSize:640,
- datatype:'base64',
- success:function(val){}
- };
- var that = this;
- // 读取文件
- this.setFilesReader = function(file){
- var reader = new window.FileReader();
- var fileSize = Math.round(file.size/1024/1024);
- var that = this;
- reader.readAsDataURL(file);
- reader.onload = function(e) {
- that.compress(this.result,fileSize);
- };
- };
- // 压缩文件
- this.compress = function(res, fileSize){
- var img = new Image();
- var maxW = options.compressSize; //压缩后大小
- var that = this;
- img.src = res;
- img.onload = function () {
- var cvs = document.createElement('canvas'), ctx = cvs.getContext('2d');
- if(img.width > maxW) {
- img.height *= maxW / img.width;
- img.width = maxW;
- }
- cvs.width = img.width;
- cvs.height = img.height;
- ctx.clearRect(0, 0, cvs.width, cvs.height);
- ctx.drawImage(img, 0, 0, img.width, img.height);
- // 设置压缩比
- var compressRate = that.getCompressRate(1,fileSize);
- // 压缩
- var dataUrl = cvs.toDataURL('image/jpeg', compressRate);
- if(options.datatype === 'blob'){
- var dataUrl = that.dataURItoBlob(dataUrl);
- }
- // 成功后回调
- that.compressCallblak(options.success,dataUrl);
- };
- };
- // 压缩后回调函数
- this.compressCallblak = function(fun,val){
- fun(val);
- };
- // 计算压缩比
- this.getCompressRate = function(allowMaxSize,fileSize){
- var compressRate = 1;
- if(fileSize/allowMaxSize > 4){
- compressRate = 0.5;
- } else if(fileSize/allowMaxSize >3){
- compressRate = 0.6;
- } else if(fileSize/allowMaxSize >2){
- compressRate = 0.7;
- } else if(fileSize > allowMaxSize){
- compressRate = 0.8;
- } else{
- compressRate = 0.9;
- }
- return compressRate;
- };
- //base64转blob
- this.dataURItoBlob = function(base64Data){
- var byteString;
- if (base64Data.split(',')[0].indexOf('base64') >= 0){
- byteString = atob(base64Data.split(',')[1]);
- }
- else{
- byteString = unescape(base64Data.split(',')[1]);
- }
- var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0];
- var ia = new Uint8Array(byteString.length);
- for (var i = 0; i < byteString.length; i++) {
- ia[i] = byteString.charCodeAt(i);
- }
- return new Blob([ia], {type:mimeString});
- }
- document.getElementById(options.el).onchange = function (){
- var f = this.files[0];
- that.setFilesReader(f);
- };
- };
示例:(转为blob对象后使用ajax上传)
- var fileImg = new UpFileImg({
- el:'file', //绑定id
- compressSize:700, //默认640
- datatype:'blob', //默认转换为base64
- success:function(data,name){
- // 回调
- console.log(data);
- console.log(name);
- var fd = new FormData();
- // file_key为上传文件后台对应的key也就相当于input的name,
- // data为bolo对象,
- // name为上传文件的名称
- fd.append("file_key", data, name);
- $.ajax({
- url: '上传地址',
- type: 'POST',
- data: fd,
- processData: false, // 必须
- contentType: false, // 必须
- dataType: 'json',
- success:function(data){
- console.log(data);
- }
- });
- }
- });
名称 | 默认值 | 是否必传 | 描述 |
el | 无 | 是 | 对应input的ID |
compressSize | 640 | 否 | 压缩后最大宽度 |
datatype | base64 | 否 | 回调函数返回值类型,默认返回base64,可以设置为blob,配合ajax进行上传 |
success | 无 | 是 | 回调函数返回文件名称,与压缩后文件(base64或者blob) |
H5单文件压缩插件的更多相关文章
- fis入门-单文件编译之文件优化(optimize)
FIS(Front-end Integrated Solution ),是百度的前端集成解决方案.最近几天在研究前端构建的东西,就顺便了解了下,果断各种高大上,可以到FIS官网围观感受一下.如果对fi ...
- 关于ZIP大文件压缩
实测:4.76 GB一个单文件压缩没有什么问题. import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...
- java-压缩文件成zip文件(多文件/单文件/多目录/单目录/无目录),用于下载
本博客是自己在学习和工作途中的积累与总结,仅供自己参考,也欢迎大家转载,转载时请注明出处. http://www.cnblogs.com/king-xg/p/6424788.html 上代码: pac ...
- c#自带压缩类实现的多文件压缩和解压
用c#自带的System.IO.Compression命名空间下的压缩类实现的多文件压缩和解压功能,缺点是多文件压缩包的解压只能调用自身的解压方法,和现有的压缩软件不兼容.下面的代码没有把多文件的目录 ...
- 开源作品-PHP写的JS和CSS文件压缩利器(单文件绿色版)-SuMinify_PHP_1_5
前言: 网站项目需要引用外部文件以减小加载流量,而且第一次加载外部资源文件后,其他同域名的页面如果引用相同的地址,可以利用浏览器缓存直接读取本地缓存资源文件,而不需要每个页面都下载相同的外部资源文件. ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(56)-插件---单文件上传与easyui使用fancybox
系列目录 https://yunpan.cn/cZVeSJ33XSHKZ 访问密码 0fc2 今天整合lightbox插件Fancybox1.3.4,发现1.3.4版本太老了.而目前easyui 1 ...
- (6/24) 插件配置:轻松配置JS文件压缩
实际开发中,在项目上线之前,我们编写的js代码是需要进行压缩的,我们可以采取压缩软件或者在线进行压缩,这不是我们的重点,在webpack中实现JS代码的压缩才是本节的核心. 通过webpack中可实现 ...
- QT发布的EXE打包压缩成单文件
Enigma virtual box 是免费的软件虚拟化工具,它可以将多个文件封装到您的应用程序主文件,这样您的软件就可以制作成为单文件的绿色软件. enigma virtual box 支持所有类型 ...
- javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)
原博客地址:https://blog.csdn.net/weixin_37766296/article/details/80044000 将多个文件压缩并下载下来:(绿色为修改原博客的位置) 注意:需 ...
随机推荐
- lintcode_93_平衡二叉树
平衡二叉树 描述 笔记 数据 评测 给定一个二叉树,确定它是高度平衡的.对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1. 您在真实的面试中是否遇到过 ...
- ElasticSearch 集群原理
节点 一个运行中的EasticSearch 被称为一个节点,而集群是由多个用于拥有相同cluster.name配置的节点组成,它们共同承担数据和负载的压力,当有新的节点加入或移除,集群会重新平均分布所 ...
- Pagehelper介绍
本文引自:https://my.oschina.net/zudajun/blog/745232 摘要: com.github.pagehelper.PageHelper是一款好用的开源免费的Mybat ...
- lnamp高性能架构之apache和nginx的整合
搭建过lamp博友和lnmp的博友们可能对这这两个单词并不陌生,对与apachen,nginx相比都源码或yum安装过,但知道apache的nginx的优点,apache处理动态页面很强,nginx处 ...
- <Docker学习>5. docker数据管理
当我们创建了一个tomcat容器,如何简单部署一个web应用?如何将war包放入到容器中?也就是说怎么样把文件从宿主机中 "放入" 到容器中? docker cp命令可以将宿主机本 ...
- Apache安装之后,在浏览器输入ip无法访问
博主本来在linux下面配置安装了apache,然后用浏览器输入ip却无法访问 就一直在想是不是dns无法解析的问题,最后才发现原来是防火墙的原因, 在linux下面 service iptables ...
- 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 ...
- POJ 3662 (二分+SPFA
Telephone Lines Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8856 Accepted: 3211 D ...
- Python 文本挖掘:使用情感词典进行情感分析(算法及程序设计)
出处:http://www.ithao123.cn/content-242299.html 情感分析就是分析一句话说得是很主观还是客观描述,分析这句话表达的是积极的情绪还是消极的情绪. 原理 比如 ...
- SQL语句知识点
PERSON表 NUMBER NAME SEX AGE 1 THERON male 19 2 JACK male 20 3 LUCY female 20 1.SELECT选择 SELECT 列 ...