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

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

码农世界 2024-05-18 前端 81 次浏览 0个评论

系列文章目录

第十章 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 = $('
    ' + '
    ' + '' + '').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 Uploader
        const uploader = WebUploader.create({
       
         
            // swf文件路径
            swf: 'static/Uploader.swf',
            server: '/minio/upload',// 文件接收服务端。
            pick: '#picker',// 选择文件的按钮。可选。内部根据当前运行是创建,可能是input元素,也可能是flash. 这里是div的id
            method: 'POST', // 文件上传方式,POST或者GET,默认Post
            resize: 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 = $(
                '
    ' + '' + '
    ' + file.name + '' + '' ), $img = $li.find('img'); // $list为容器jQuery实例 $list.append($li); // 创建缩略图 // 如果为非图片文件,可以不用调用此方法。 // thumbnailWidth x thumbnailHeight 为 100 x 100 uploader.makeThumb(file, function (error, src) { if (error) { $img.replaceWith('不能预览'); return; } $img.attr('src', src); }, thumbnailWidth, thumbnailHeight); });

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

    图片压缩

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

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

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

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

    // 初始化Web Uploader
        const uploader = WebUploader.create({
       
         
            // swf文件路径
            swf: 'static/Uploader.swf',
            server: '/minio/upload',// 文件接收服务端。
            pick: '#picker',// 选择文件的按钮。可选。内部根据当前运行是创建,可能是input元素,也可能是flash. 这里是div的id
            method: 'POST', // 文件上传方式,POST或者GET,默认Post
            resize: 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。


转载请注明来自码农世界,本文标题:《Minio WebUploader上传文件的高级用法之进度条显示、文件过滤、图片预览、图片压缩》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,81人围观)参与讨论

还没有评论,来说两句吧...

Top