Flash基础入门之百度上传插件WebUploader,angularjs指令封装
小标 2019-02-21 来源 : 阅读 1098 评论 0

摘要:本文主要向大家介绍了Flash基础入门之百度上传插件WebUploader,angularjs指令封装,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

本文主要向大家介绍了Flash基础入门之百度上传插件WebUploader,angularjs指令封装,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。

Flash基础入门之百度上传插件WebUploader,angularjs指令封装

1、WebUploader特点

官网地址://fex.baidu.com/webuploader/

1.1 分片、并发

分片与并发结合,将一个大文件分割成多块,并发上传,极大地提高大文件的上传速度。

当网络问题导致传输错误时,只需要重传出错分片,而不是整个文件。另外分片传输能够更加实时的跟踪上传进度。

1.2 预览、压缩

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

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

1.3 多途径添加文件

支持文件多选,类型过滤,拖拽(文件&文件夹),图片粘贴功能。

粘贴功能主要体现在当有图片数据在剪切板中时(截屏工具如QQ(Ctrl + ALT + A), 网页中右击图片点击复制),Ctrl + V便可添加此图片文件。

1.4 HTML5 & FLASH

兼容主流浏览器,接口一致,实现了两套运行时支持,用户无需关心内部用了什么内核。

同时Flash部分没有做任何UI相关的工作,方便不关心flash的用户扩展和自定义业务需求。

1.5 MD5秒传

当文件体积大、量比较多时,支持上传前做文件md5值验证,一致则可直接跳过。

如果服务端与前端统一修改算法,取段md5,可大大提升验证性能,耗时在20ms左右。

1.6 易扩展、可拆分

采用可拆分机制, 将各个功能独立成了小组件,可自由搭配。

采用AMD规范组织代码,清晰明了,方便高级玩家扩展。

2、引入资源

2.1 下载包内容

├── Uploader.swf // SWF文件,当使用Flash运行时需要引入。   ├── webuploader.js // 完全版本。 ├── webuploader.min.js // min版本   ├── webuploader.flashonly.js // 只有Flash实现的版本。 ├── webuploader.flashonly.min.js // min版本   ├── webuploader.html5only.js // 只有Html5实现的版本。 ├── webuploader.html5only.min.js // min版本   ├── webuploader.withoutimage.js // 去除图片处理的版本,包括HTML5和FLASH. └── webuploader.withoutimage.min.js // min版本

 

2.2 或者直接使用由staticfile提供的cdn版本,或者下载Git项目包。

// SWF文件,当使用Flash运行时需要引入。 ├── //cdn.staticfile.org/webuploader/0.1.0/Uploader.swf
 
// 完全版本。 ├── //cdn.staticfile.org/webuploader/0.1.0/webuploader.js ├── //cdn.staticfile.org/webuploader/0.1.0/webuploader.min.js
 
// 只有Flash实现的版本。 ├── //cdn.staticfile.org/webuploader/0.1.0/webuploader.flashonly.js ├── //cdn.staticfile.org/webuploader/0.1.0/webuploader.flashonly.min.js
 
// 只有Html5实现的版本。 ├── //cdn.staticfile.org/webuploader/0.1.0/webuploader.html5only.js ├── //cdn.staticfile.org/webuploader/0.1.0/webuploader.html5only.min.js
 
// 去除图片处理的版本,包括HTML5和FLASH. ├── //cdn.staticfile.org/webuploader/0.1.0/webuploader.withoutimage.js └── //cdn.staticfile.org/webuploader/0.1.0/webuploader.withoutimage.min.js

2.3 DIY打包

WebUploader文件打包借助了Grunt工具来实现

2.3.1 环境依赖

1.git命令行工具2.node & npm命令行工具3.grunt (npm install grunt-cli -g)

2.3.2 编译代码

1.克隆 webuploader git仓库,git clone https://github.com/fex-team/webuploader.git。2.安装node依赖,npm install。3.执行grunt dist,此动作会在dist目录下面创建合并版本的js, 包括通过uglify压缩的min版本。

2.3.3 配置

打开webuploader仓库根目录下面的Gruntfile.js文件, 代码合并有buildtask来完成。找到build配置项。

Gruntfile.js已经配置了一个自定义合并的demo. 打包只支持HTML5的版本

// 自己配置的实例 // glob语法。 custom: {
    preset:  "custom",
    cwd: "src",
    src: [
        'widgets/**/*.js',
        'runtime/html5/**/*.js' ],
    dest: "dist/webuploader.custom.js" }

3、angular指令——<web-uploader>

3.1 指令功能

添加一个上传文件按钮,可以自行配置上传文件的类型和过滤规则,且在弹出的模态框中进行操作,支持连续上传,分类选择上传

3.2 使用说明

这里只是使用说明,可能会加一些注意事项,具体参数或者变量说明请参看后面

3.2.1 页面添加一个指令

<web-uploader class="btn btn-info" type="image" accept="accept">uploader</web-uploader>

3.2.2 配置上传类型和过滤规则

上传类型

type有四种类型,分别为

image:图片

video:音视频

flash:flash

file:办公文档,压缩文件等等

过滤规则

accept有四个对象属性,属性中包含标题、允许文件后缀、允许的mimetype

3.2.3 指令中绑定弹出模态框的事件

web-uploader这个指令中其实只做了一件事,给元素本身绑定弹出模态框的事件,具体上传文件是在模态框中完成的

3.2.4 初始化uploader类,配置相关属性

在模态框控制器中用到了$timeout

$timeout(function(){//这里是上传配置代码
 },0)

因为配置uploader时需要事先准备好dom元素,angular打开模态框是异步而JavaScript是单线程,所以实际上在执行模态框控制器中的代码时,模态框并没有打开,也就是dom并没有加载完成,这会导致WebUploader报a.runningtime is not a function...的错误

3.3 指令详细说明

3.3.1 父级controller中的配置

.controller('myCtrl',['$scope', '$modal', function($scope, $modal){ //配置允许上传的类型 图片/音视频/flash/文件
$scope.accept = {   //图片   image: {
    title : 'Images',//标题
    extensions : 'gif,jpg,jpeg,bmp,png,ico',//允许上传文件的后缀
    mimeTypes : 'image/*'//允许的mimetype   },   //音视频   video: {
    title : 'Videos',
    extensions : 'wmv,asf,asx,rm,rmvb,ram,avi,mpg,dat,mp4,mpeg,divx,m4v,mov,qt,flv,f4v,mp3,wav,aac,m4a,wma,ra,3gp,3g2,dv,vob,mkv,ts',
    mimeTypes : 'video/*,audio/*'
  },   //flash   flash: {
    title : 'Flashs',
    extensions : 'swf,fla',
    mimeTypes : 'application/x-shockwave-flash'
  },   //办公文档,压缩文件等等   file: {
    title : 'Files',
    extensions : 'zip,rar,ppt,pptx,doc,docx,xls,xlsx,pdf',
    mimeTypes : 'application/zip,application/x-rar-compressed,application/vnd.ms-powerpoint,application/vnd.openxmlformats-             officedocument.presentationml.presentation,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-   excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/pdf'
  }
 };
 
}])

3.3.2 指令web-uploader

.directive('webUploader', ['$modal', function($modal){   return{
    restrict: 'AE',
    scope: {
      accept: '=accept'
    },
    link: function($scope, $element, $attr){
 
      $element.bind('click',function(){         var modalInstance = $modal.open({
        controller: 'modalCtrl',
        templateUrl: 'template/webuploader.tpl.html',
        size:'lg',
        resolve: {
          items: function(){             return {
              accept: $scope.accept,
              type: $attr.type
            };
          }
        }
      });
      modalInstance.result.then(function(returnStatus){
        console.log(returnStatus);
      },function(){
        console.log('Modal dismissed at: ' + new Date());
      });
    });
  }
};
}]);

参数    类型    说明    

accept    object    允许的文件类型,此对象是父级controller传到指令中的    

type    string    

四种,分别为

image/video/flash/file

分别代表

图片/音视频/flash/办公文档,压缩文件等等

   

 

 

 

 

 

 

 

3.3.3 上传文件模态框

<div>
   <div class="modal-header">
       <span><strong>文件上传</strong></span>
       <button type="button" class="close" aria-label="Close" ng-click="cancel()">
           <span aria-hidden="true">&times;</span>
       </button>
   </div>
   <div class="modal-body">
       <div id="uploader" class="wu-example">
           <div class="queueList">
               <div id="dndArea" class="placeholder">
                   <div id="filePicker" class="webuploader-container">
                       <div class="webuploader-pick">点击选择图片</div>
                       <div id="rt_rt_19kk0j9rh1onsdor17c73va1u01"
                           style="position: absolute; top: 0px; left: 448px; width: 168px; height: 44px; overflow: hidden; bottom: auto; right: auto;">
                           <input type="file" name="file"
                               class="webuploader-element-invisible" multiple="multiple"
                               accept="image/*"><label                                style="opacity: 0; width: 100%; height: 100%; display: block; cursor: pointer; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial;"></label>
                       </div>
                   </div>
                   <p>或将文件拖到这里,单次最多可选30个</p>
               </div>
               <ul class="filelist"></ul>
           </div>
           <div class="statusBar" style="display: none;">
               <div class="progress" style="display: none;">
                   <span class="text">0%</span> <span class="percentage"
                       style="width: 0%;"></span>
               </div>
               <div class="info">共0张(0B),已上传0张</div>
               <br>
               <div class="btns">
                   <div id="filePicker2" class="webuploader-container">
                       <div class="webuploader-pick">继续添加</div>
                       <div id="rt_rt_19kk0j9s01k61gq0cks1fsivlv6"
                           style="position: absolute; top: 0px; left: 0px; width: 1px; height: 1px; overflow: hidden;">
                           <input type="file" name="file"
                               class="webuploader-element-invisible" multiple="multiple"
                               accept="image/*"><label                                style="opacity: 0; width: 100%; height: 100%; display: block; cursor: pointer; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial;"></label>
                       </div>
                   </div>
                   <div class="uploadBtn state-pedding">开始上传</div>
                   <div class="modalCancel" ng-click="cancel()">
                       <span>取消</span>
                   </div>
               </div>
           </div>
       </div>
   </div></div>

3.3.4 模态框控制器

selectType这个对象与指令中的属性type=""是对应的

例:type="image"时,模态框中的文字

type="video"时,模态框中的文字

在模态框控制器中用到了$timeout

$timeout(function(){//这里是上传配置代码
 },0)

 

因为配置uploader时需要事先准备好dom元素,angular打开模态框是异步而JavaScript是单线程,所以实际上在执行模态框控制器中的代码时,模态框并没有打开,也就是dom并没有加载完成,这会导致WebUploader报a.runningtime is not a function...的错误

 

请看附件中101行,创建uploader实例的代码

当然配置还有很多,请参看webuploader API  :  //fex.baidu.com/webuploader/doc/index.html

这里主要操作的是pick.innerHTML和accept

// 实例化
       var uploader = WebUploader.create({            //指定选择文件的按钮容器
           //multiple是否开启多文件上传,默认为true            pick : {
               id : '#filePicker',                //label : '点击选择图片'
               innerHTML: '点击选择' + $scope.selectType[items.type],
               multiple: true
           },            //指定拖拽的容器
           dnd : '#uploader .queueList',            //启用通过截屏来粘贴图片            paste : document.body,            //指定接受哪些类型的文件            accept : items.accept[items.type],            // swf文件路径
           swf : 'Uploader.swf',

           disableGlobalDnd : true,            //是否分片
           chunked : true,            //chunkSize: 700000,  //每个分片的大小,默认为5M
           // server: '//webuploader.duapp.com/server/fileupload.php',
           server : '../demo',            //文件最大数量
           fileNumLimit : 30,            //验证文件总大小是否超出限制
           fileSizeLimit : 5 * 1024 * 1024, // 200 M
           //验证单个文件大小是否超出限制
           fileSingleSizeLimit : 1 * 1024 * 1024        // 50 M
       });

4、附件

webuploader-0.1.5.zip  https://yunpan.cn/cPLpURzNQATdt (提取码:1abf)

百度WebUploader上传文件插件,grunt版

uploader.war  https://yunpan.cn/cPLpXa3P7JxUE (提取码:c3ce)

web-uploader指令,写了一个servlet来测试,可直接放在tomcat  webapp下启动tomcat测试,也可以导入eclipse中进行测试

webUploderDemo.15.08.14.zip  https://yunpan.cn/cPLpzkBJ84Tq8 (提取码:8546)

以上就介绍了Flash的相关知识,希望对Flash有兴趣的朋友有所帮助。了解更多内容,请关注职坐标常用软件Flash频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程