Minio WebUploader上传文件的高级用法之进度条显示、文件过滤、图片预览、图片压缩

系列文章目录

第十章 Minio WebUploader上传文件的高级用法之进度条显示、文件过滤、图片预览、图片压缩


Minio WebUploader上传文件的高级用法之进度条显示、文件过滤、图片预览、图片压缩

  • 系列文章目录
  • 进度条显示
  • 文件过滤
  • 图片预览
  • 图片压缩


进度条显示

使用进程文件上传时,进度条显示是一个常用的功能,而WebUploader组件也是支持的。

文件上传中,Web Uploader会对外派送uploadProgress事件,其中包含文件对象和该文件当前上传进度。

我们这里只需要在JS中添加以上事件就可以了。

  // 文件上传过程中创建进度条实时显示。uploader.on('uploadProgress', function (file, percentage) {let $li = $('#' + file.id),$percent = $li.find('.progress .progress-bar');// 避免重复创建if (!$percent.length) {$percent = $('<div class="progress progress-striped active">' +'<div class="progress-bar" role="progressbar" style="width: 0%">' +'</div>' +'</div>').appendTo($li).find('.progress-bar');}$li.find('p.state').text('上传中(' + ((percentage * 100).toFixed(2) + '%') + ')');$percent.css('width', percentage * 100 + '%');});

注意,这里有一个坑,进度条的样式需要自己配置,所以要在webuploader.css文件中添加以下CSS样式。

.progress {height: 20px;margin-bottom: 20px;overflow: hidden;background-color:f5f5f5;border-radius: 4px;-webkit-box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
}
.progress.active .progress-bar {-webkit-animation: progress-bar-stripes 2s linear infinite;animation: progress-bar-stripes 2s linear infinite;
}.progress-striped .progress-bar {background-image: linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size: 40px 40px;
}
.progress-bar {background-image: -webkit-linear-gradient(top,#428bca 0,#3071a9 100%);background-image: linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat: repeat-x;filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=’#ff428bca’,endColorstr=’#ff3071a9’,GradientType=0);
}
.progress-bar {float: left;height: 100%;font-size: 12px;line-height: 20px;color:fff;text-align: center;background-color:428bca;box-shadow: inset 0 -1px 0 rgba(0,0,0,0.15);transition: width .6s ease;
}

点击上传,进度条就成功显示了


文件过滤

文件过滤可以对添加的文件类型进行限制,比如只能上传图片,这也是一个常用的功能。

实际使用时,只需要在初始化uploader时,添加accept配置就可以了。比如以下代码表示,只能添加图片。

// 初始化Web Uploaderconst uploader = WebUploader.create({// swf文件路径swf: 'static/Uploader.swf',server: '/minio/upload',// 文件接收服务端。pick: '#picker',// 选择文件的按钮。可选。内部根据当前运行是创建,可能是input元素,也可能是flash. 这里是div的idmethod: 'POST', // 文件上传方式,POST或者GET,默认Postresize: false,// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!// 只允许选择图片文件。accept: {title: 'Images',extensions: 'gif,jpg,jpeg,bmp,png',mimeTypes: 'image/*'}});

点击选择文件,发现只能选择图片类型。就算选择到了非图片类型,也无法添加到上传队列中。

图片预览

WebUploader支持在添加图片后,展示预览图。监听fileQueued事件,通过uploader.makeThumb来创建图片预览图。 注意这里得到的是Data URL数据,IE6、IE7不支持直接预览。可以借助FLASH或者服务端来完成预览。

这里我们添加一个fileQueued事件。

// 当有文件添加进来的时候uploader.on('fileQueued', function (file) {// 缩略图大小var ratio = window.devicePixelRatio || 1;var thumbnailWidth = 100 * ratio;var thumbnailHeight = 100 * ratio;var $ = jQuery;var $list = $('#list');var $li = $('<div id="' + file.id + '" class="file-item thumbnail">' +'<img>' +'<div class="info">' + file.name + '</div>' +'</div>'),$img = $li.find('img');// $list为容器jQuery实例$list.append($li);// 创建缩略图// 如果为非图片文件,可以不用调用此方法。// thumbnailWidth x thumbnailHeight 为 100 x 100uploader.makeThumb(file, function (error, src) {if (error) {$img.replaceWith('<span>不能预览</span>');return;}$img.attr('src', src);}, thumbnailWidth, thumbnailHeight);});

然后点击选择文件,预览图效果就出来了。

图片压缩

支持常用图片格式jpg,jpeg,gif,bmp,png预览与压缩,节省网络数据传输。

解析jpeg中的meta信息,对于各种orientation做了正确的处理,同时压缩后上传保留图片的所有原始meta数据。

只需要在初始化添加compress,配置压缩的图片的选项。如果此选项为false, 则图片在上传前不进行压缩。

比如以下代码表示对图片进行压缩。

// 初始化Web Uploaderconst uploader = WebUploader.create({// swf文件路径swf: 'static/Uploader.swf',server: '/minio/upload',// 文件接收服务端。pick: '#picker',// 选择文件的按钮。可选。内部根据当前运行是创建,可能是input元素,也可能是flash. 这里是div的idmethod: 'POST', // 文件上传方式,POST或者GET,默认Postresize: false,// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!compress:{width: 100,height: 100,// 图片质量,只有type为image/jpeg的时候才有效。quality: 50,// 是否允许放大,如果想要生成小图的时候不失真,此选项应该设置为false.allowMagnify: false,// 是否允许裁剪。crop: false,// 是否保留头部meta信息。preserveHeaders: true,// 如果发现压缩后文件大小比原来还大,则使用原来图片// 此属性可能会影响图片自动纠正功能noCompressIfLarger: false,// 单位字节,如果图片大小小于此值,不会采用压缩。compressSize: 0}});

然后在页面上上传一个170K的文件:
然后登录Minio,发现图片被压缩到了2.4k。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/15053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+html的二手交易平台(附源码)

基于springboothtml的二手交易平台 介绍部分界面截图如下联系我 介绍 本系统是基于springboothtml的二手交易平台&#xff0c;数据库为mysql&#xff0c;可用于毕设或学习&#xff0c;附数据库 部分界面截图如下 联系我 VX&#xff1a;Zzllh_

java Iterable和 Iterator接口区别和联系

Iterable 和 Iterator 是 Java 集合框架中用于遍历集合元素的两个接口,它们之间既有区别也有联系。下面详细介绍它们的区别和联系。 Iterable 接口 定义 Iterable 接口位于 java.lang 包中,定义如下: public interface Iterable<T> {Iterator<T> iterator()…

在家庭影院音频中应用的D类音频放大器

家庭影院的主要组成部分包括显示设备、音响设备、信号源和接线设备等。家庭影院的音响信号需要进行处理和输出&#xff0c;以获得高质量的音效。音响设备通常需要一台功率适当的数字、模拟混合的处理器&#xff0c;对音源进行降噪、均衡、扩展等处理操作&#xff0c;以达到高品…

核心交换机与终端通信正常,接入交换机无法Ping通同一VLAN内终端

环境: 思科3560交换机 问题描述: 核心交换机与PC通信正常,接入交换机无法Ping通同一VLAN内PC h3c核心交换机配置vlan2 vlanif2 IP192.168.1.1 下挂接入交换机配置了vlan2 pc接到接入交换机25口这个端口配置access vlan2,pc的ip是192.168.1.3从 核心交换机上ping192.168.…

【智能算法应用】北方苍鹰算法求解二维栅格路径规划问题

目录 1.算法原理2.二维路径规划数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】北方苍鹰优化算法&#xff08;NGO)原理及实现 2.二维路径规划数学模型 栅格法模型最早由 W.E. Howden 于 1968 年提出&#xff0c;障碍物的栅格用黑色表示&#xff0c;可通过的…

ping 探测网段哪些地址被用

#!/bin/bash# 遍历192.168.3.1到192.168.3.254 for i in {1..254} doip"192.168.3.$i"# 对每个IP地址进行三次ping操作if ping -c 3 -W 1 $ip > /dev/null 2>&1thenecho "$ip: yes"fi done$ sh test.sh 192.168.3.1: yes 192.168.3.95: yes 192.…

使用Word表格数据快速创建图表

实例需求&#xff1a;Word的表格如下所示&#xff0c;标题行有合并单元格。 现在需要根据上述表格数据&#xff0c;在Word中创建如下柱图。如果数据在Excel之中&#xff0c;那么创建这个图并不复杂&#xff0c;但是Word中就没用那么简单了&#xff0c;虽然Word中可以插入图表&a…

014_C标准库函数之<stdio.h>

【背景】 今天这个主要说的是<stdio.h>头文件&#xff0c;大家众所周知&#xff0c;这个是我们学习C语言时第一个接触到的头文件了&#xff0c;那么为什么我不一开始就介绍这个头文件呢&#xff1f;我觉得有两个原因&#xff0c;如下&#xff1a; 1.一开始大家的编程思…

LeetCode/NowCoder-链表经典算法OJ练习3

孜孜不倦&#xff1a;孜孜&#xff1a;勤勉&#xff0c;不懈怠。指工作或学习勤奋不知疲倦。&#x1f493;&#x1f493;&#x1f493; 目录 说在前面 题目一&#xff1a;返回倒数第k个节点 题目二&#xff1a;链表的回文结构 题目三&#xff1a;相交链表 SUMUP结尾 说在前…

Pytorch: 解决因pytorch版本不同 导致训练ckpt加载失败

大家都会遇到在工程项目实施阶段&#xff0c;如果训练的模型文件在不同的torch版本环境下部署时&#xff0c;会报错~。 报错举例 # 查看torch环境 import torch print(torch.__version__)# 训练时环境&#xff1a;torch 1.8.2cu111 # 部署时环境&#xff1a;torch 1.4.0torch.…

dcatAdmin框架 使用phpword 生成word文件

下载phpword插件 composer require phpoffice/phpword 生成word文件接口 static public function word(){//接收传值$order_id request()->get(order_id);$tpl_id request()->get(tpl_id);//查询出对应的数据以及关联数据$sale_order \App\Models\SaleOrder::with([…

Python异步编程之基础概念

Python异步编程之基础概念 在现代编程中&#xff0c;异步编程是一种重要的技术&#xff0c;尤其是在处理I/O密集型任务时&#xff0c;异步编程可以大大提高程序的性能和响应速度。本文将介绍Python异步编程的基础概念&#xff0c;帮助你理解其原理和应用。 什么是异步编程&am…

【代码随想录算法训练营第37期 第十七天 | LeetCode110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和】

代码随想录算法训练营第37期 第十七天 | LeetCode110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和 一、110.平衡二叉树 解题代码C&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *righ…

三、NVIDIA Jetson Orin开发板-GPU加速

一、NVIDIA Jetson Orin开发板的硬件情况 df -h#查看操作系统情况Filesystem Size Used Avail Use% Mounted on **/dev/nvme0n1p1** 234G 17G 208G 8% / none 7.4G 0 7.4G 0% /dev tmpfs 7.6G 0 7.6G 0% /dev/shm tmpfs …

LeetCode 2644.找出可整除性得分最大的整数:暴力模拟(两层循环)

【LetMeFly】2644.找出可整除性得分最大的整数&#xff1a;暴力模拟&#xff08;两层循环&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-the-maximum-divisibility-score/ 给你两个下标从 0 开始的整数数组 nums 和 divisors 。 divisors[i] 的 …

MySQL库/表/数据的操作

文章目录 1.数据库操作1.1 创建、删除、查看和修改1.2 编码格式1.3 备份和恢复 2.表的操作2.1 创建表2.2 存储引擎2.3 查看表、修改表、删除表 3.数据类型3.1整数类型3.2字节类型(bit)3.3浮点类型(bit)3.4 decimal3.5 字符串类型3.6 日期和时间类型3.7 enum和set关于如何查找想…

webpack 学习之 五大核心

为什么用 webpack webpack 官网传送门 … 官网&#xff1a;webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。将你项目中所需的每一个模块组合成一个或多个 bundles&#xff0c;它们均为静态资源&#xff0c;用于展示你的内容。总结&#xff1a;汇总所有模块…

Python中别再用 ‘+‘ 拼接字符串了!

大家好&#xff0c;在 Python 编程中&#xff0c;我们常常需要对字符串进行拼接。你可能会自然地想到用 操作符将字符串连接起来&#xff0c;毕竟这看起来简单明了。 在 Python 中&#xff0c;字符串是不可变的数据类型&#xff0c;这意味着一旦字符串被创建&#xff0c;它就…

【Python】—— lambda表达式

目录 &#xff08;一&#xff09;应用场景 &#xff08;二&#xff09;lambda 语法 &#xff08;三&#xff09;示例分析 &#xff08;四&#xff09;lambda参数形式 4.1 无参数 4.2 一个参数 4.3 默认参数 4.4 可变参数 &#xff1a;*args 4.5 可变参数 &#xff1a;…

【Python爬虫】案例_github模拟登录

import requests import re from datetime import datetimedef login():sessionrequests.session()session.headers {User-Agent :XXXX #写自己的}url1 https://github.com/loginres_1 session.get(url1).content.decode()token re.findall(name"authenticity_token&q…