JQuery 常用(七)上传组件

因为有万恶的 IE 存在,所以当Web项目初始化并进入开发阶段时。

如果是项目经理,需要很明确的知道客户将会用什么浏览器来访问系统。

明确知道限定浏览器的情况下,你才能从容的让手下的封装必要的前端组件。

本篇文章试图从常见的上传方式和组件进行分析,仅局限与前端,至于后端需依据业务复杂度,自行拿捏实现方式,若文中有纰漏,欢迎拍砖!

1. Input type="file" 也可以性感

当然你也可以不用任何成熟的上传组件,表单提交文件,像这样:

<form action="<%=request.getContextPath()%>/uploadfile" method="POST" enctype="multipart/form-data">
    yourfile: <input type="file" name="myfiles"/><br/>
    <input type="submit"/>
</form>

多个文件一起提交,添加里面的 input 选项即可,但 name 名称需要一致。

当然你也可以在提交文件的时候,提交一些其他的参数数据上去,像下面这样:

<form action="<%=request.getContextPath()%>/uploadfile" method="POST" enctype="multipart/form-data">
    username: <input type="text" name="username"/><br/>
    password: <input type="password" name="password"/><br/>
    yourfile: <input type="file" name="myfiles"/><br/>
    yourfile: <input type="file" name="myfiles"/><br/>
    yourfile: <input type="file" name="myfiles"/><br/>
    <input type="submit"/>
</form>

注意其中的 enctype 设置为multipart/form-data。

这种上传文件的方式,优缺点显而易见,不需要使用任何第三方 js,纯天然 html 标签、走到哪用到哪、没有浏览器障碍.....

对于多变的项目需求,它说我想,看到上传的进度条、能拖拽文件上传、上传前压缩..........

综上所述,这种性感撩人的 <input type="file">  的标签能出现的项目,定位在小型简单、客户好说话的web应用中。

2. Uploadify 双版本上传组件

这个组件想必是用的比较广泛,提供 Flash 和 HTML5 两个不同的版本,能让你避免很多浏览器兼容性的问题。

支持显示文件上传实时进度条,拖拽文件上传、多样化的参数配置、高度可定制化....能满足绝大部分项目的上传需求。

官网地址:http://www.uploadify.com/

其中 Flash 版是免费下载的,但 HTML5 版本需要掏钱,如果你需要H5  Version,请在评论区留邮箱。

使用这个组件的前提,需要先引入 Jquery:

<script type="text/javascript" src="/style/js/jquery.js"></script>
<script type="text/javascript" src="/style/js/jquery.uploadify.min.js"></script>
<style type="text/css" src="/style/js/uploadify.css"></style>

<div class="updiv">
    <div class="upfileAfter">
        <a href="javascript:$(‘#upfileBtn‘).uploadify(‘upload‘,‘*‘)">开始上传</a>
    </div>
    <a href="#" id="upfileBtn">选择文件</a>
</div>

初始化组件方法(具体的参数设置和回调函数的入参请查阅官方文档):

$("#upfileBtn").uploadify({
    ‘debug‘: false,// 开启调试
    ‘auto‘: false,// 是否自动上传
    //‘simUploadLimit‘ : 3,  //并发上传数量[falsh版不生效]
    //‘successTimeout‘: 30,// 默认值30秒,文件上传完成时等待服务器响应的时间,之后显示成功信息。
    ‘fileObjName‘ : ‘file‘,
    ‘swf‘: XX+ "/style/js/uploadifynochange/uploadify.swf",
    ‘uploader‘: XX + ‘/service/uploadFile‘,// 上传处理程序
    ‘formData‘: {‘fjzlDm‘: ‘‘, timeStamp: ‘‘},
    ‘multi‘: true,// 是否支持多文件上传
    ‘width‘: ‘95px‘,// 浏览按钮的宽度
    ‘height‘: ‘30px‘,// 浏览按钮的高度
    ‘progressData‘ : ‘speed‘, //文件进度条的样式
    ‘buttonText‘: ‘<i class="icon icon-file icon-white"></i> 选择文件‘, //按钮文字
    ‘fileSizeLimit‘: ‘10240‘,//上传文件大小限制
    ‘fileTypeExts‘: ‘*.bmp;*.png;*.jpeg;*.jpg;*.gif‘,//可上传的文件类型
    ‘overrideEvents‘: [‘onDialogClose‘,‘onUploadSuccess‘,‘onUploadError‘],
    ‘onFallback‘: function () {
        alert("您未安装FLASH控件,无法上传图片!请安装FLASH控件后再试。");// 检测FLASH失败调用
    },
    ‘onDialogClose‘: function () {
        alert("Dialog  Close......");
    },
    ‘onUploadSuccess‘: function (file, data, response) {
        alert("UploadSuccess......");
    },
    ‘onUploadError‘ : function () {
        alert("Upload   Error......");
    }
});

网上有很多上传组件都是修改 Uploadify 的源码的某一部分,然后重新命名的。

这个组件在项目中表现确实不错,使用 Flash version 浏览器中只需要安装 Flash Player 即可。

当下浏览器中不安装 Flash Player 的确找不出几个。

但不置可否的是 Flash 效率 没有 H5 的高,兼容性和稳定性必须舍弃一部分,让两者都有相对最优解。

3. Web Uploader 百度技术团队开源力作

Webuploader 是由百度 Fex-team 团队开发,官网地址:http://fex.baidu.com/webuploader/

除了 Uploadify 的所有特性,最吸引人的特点是文件可以分片并发上传、同一组件内部决定使用 Flash 还是 H5 上传....

最后出场的一般都是压轴人物,不否认的是现在我们中项目中使用的就是 Web Uploader 组件。

不在为浏览器的兼容性而频繁更换组件调整代码,Uploader 会根据运行环境切换上传的方式,让你更省心。

<script type="text/javascript" src="/style/js/jquery.js"></script>
<script type="text/javascript" src="/style/js/webuploader.min.js"></script>
<style type="text/css" src="/style/js/webuploader.css"></style>

<div id="uploader" class="wu-example">
    <div id="thelist" class="uploader-list"></div>
    <div class="btns" style="position: relative;display: inline-block">
        <div id="picker"><i class="glyphicon glyphicon-plus"></i>点击添加文件</div>
        <a href="#" id="up-all">开始上传</a>
    </div>
</div>

初始化组件方法(具体的参数设置和回调函数的入参请查阅官方文档):

var uploader = WebUploader.create({
            // swf文件路径
            swf:  ‘/style/js/webuploade/Uploader.swf‘,
            // 文件接收服务端。
            server: ‘/service/uploadFile‘,
            auto: false,
            formData: {
                paramA: ‘paramA‘
            },
            // 选择文件的按钮。可选。
            // 内部根据当前运行是创建,可能是input元素,也可能是flash.
            pick: ‘#picker‘
        });

        $("#up-all").on("click",function(){
            uploader.upload();
        });
        // 当有文件被添加进队列的时候
        uploader.on(‘fileQueued‘, function (file) {
            $("#thelist").append(‘<div id="‘ + file.id + ‘" class="item">‘ +
                    ‘<h4 class="info">‘ + file.name + ‘</h4>‘ +
                    ‘<p class="state">等待上传...</p>‘ +
                    ‘</div>‘);
        });

        // 文件上传过程中创建进度条实时显示
        uploader.on(‘uploadProgress‘, function (file, percentage) {
            var $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(‘上传中‘);
            $percent.css(‘width‘, percentage * 100 + ‘%‘);
        });

        uploader.on(‘uploadError‘, function (file) {
            $(‘#‘ + file.id).find(‘p.state‘).text(‘上传出错‘);
        });

        uploader.on(‘uploadComplete‘, function (file) {
            $(‘#‘ + file.id).find(‘.progress‘).fadeOut();
        });

        uploader.on(‘startUpload‘, function () {
            uploader.option(‘formData‘, {‘paramA‘: ‘‘});
        });

Uploadify 和 Uploader 都可以动态的添加表单参数。

个人偏向于喜欢百度的这款 Uploader,但仁者见仁智者见智,多几种选择未尝不是好事情。

还需要注意的是,在实现获取上传文件的过程中,我发现只有表单提交上去的多文件是在一次请求当中。

而 Uploadify 和 Uploader 都是点击全部上传后,多次请求后端的 Action,每次只携带一个文件。

请求次数等于你的文件上传次数,我在实现过程中是通过添加时间戳的方式解决的该问题。

也有可能是我使用的有问题,文件上传后肯定需要和具体的业务挂钩,业务问题这里就不赘述了。

时间: 2024-08-05 12:19:55

JQuery 常用(七)上传组件的相关文章

jQuery.uploadify文件上传组件实例讲解

1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好,无刷新,带上传进度等等.在最近的短信平台开发中,使用Uploadify进行文件上传. Uploadify官网地址是:http://www.uploadify.com/ 可满足项目开发需求. 下载地址:http://www.uploadify.com/wp-content/uploads/files/

HTML5文件上传组件美化jQuery插件

简要教程 jQuery.filer是一款简单的HTML5文件上传组件美化jQuery插件.它能够完成单文件和多文件的上传,支持文件的拖拽,支持不同的文件格式校验,支持缩略图和图标等,是一款非常实用的文件上传插件.它的特点还有: 对文件上传File Input组件进行美化 支持多文件上传 支持校验文件:大小,扩展名等 支持创建文件的缩略图 每种类型的文件可以自定义图标 可以为缩略图,图标和input自定义模板和主题 可以移出已选择的文件 可以从剪切板粘贴图片 所有的图标在一个字体文件中 支持文件拖

Atitit..文件上传组件选型and最佳实践总结(2)----断点续传

Atitit..文件上传组件选型and最佳实践总结(2)----断点续传 1. 断点续传的原理 1 2. 如何判断一个插件/控件是否支持断点续传?? 1 3. 常用的组件选型结果::马 1 4. 自定义断点续传控件要实现的指标 2 5. 断点续传实现协议ftp/http/ rmi 等选型.. 2 6. 断点续传实现方式activex,plugin,,applet,  Flash ,能不能实现断点续传?? 3 7. Missing required permissions manifest att

基于MVC4+EasyUI的Web开发框架形成之旅--附件上传组件uploadify的使用

很久之前,当我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随笔<Web开发中的文件上传组件uploadify的使用>中可以看到,Asp.NET中如何使用这个组件进行文件上传的,当时上传文件的处理主要也是使用ashx一般处理程序来进行处理的.本文主要介绍我的Web开发框架中,在MVC4的环境中如何集成这个非常棒的文件上传组件的. 1.上传组件uploadify的说明及脚本引用 Uploadify 是 JQuery 一个著名的上传插件,利用 Flash

百度上传组件:webuploader

百度图片上传组件: 页面: <div class="upload"> <section> <article> <div class="wu-example"> <div id="fileList" class="uploader-list"></div> <span id="picker">上传出生证明</span&g

异步文件上传组件 Uploader

Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证.图片预览.进度条等,广泛应用于淘宝网,比如退款系统.爱逛街.二手.拍卖.我的淘宝.卖家中心.导购中心等. Uploader的特性 支持ajax.flash.iframe三种方案,兼容所有浏览器.(iframe不推荐使用) 多主题支持,可以自己定制主题 丰富的插件支持 支持多选批量上传 支持上传进度显示 支持取消上传 支持图片预览(

web 文件上传组件 Plupload

Plupload官网:点击打开链接   建议下载最新版本,低版本会出现浏览器兼容问题. 最近公司有个项目需要在web端使用多文件上传功能,刚开始准备使用HTML5来做,但是IE9以下是都不支持的,于是想到了flash,在网上搜了下各种开源的组件,最后决定使用Plupload,下面来介绍一下该组件使用时遇到的一些问题以及解决方案. 先贴出配置参数: <script type="text/javascript"> // Initialize the widget when th

上传组件Fine Uploader在ASP.NET中的应用

现如今,世面上流行着许多前端上传组件,例如:Uploadify(http://www.uploadify.com/),Fine Uploader,等等.这篇博客从头开始,介绍如何在ASP.NET MVC中使用Fine Uploader. Fine Uploader官网:https://fineuploader.com/demos.html 代码结果如下图所示,可以选择本地文件之后点击上传,文件会被传输到服务器根目录下的Upload文件夹中(文件夹的名称是代码中定义的). Step By Step

基于MVC4+EasyUI的Web开发框架形成之旅(4)--附件上传组件uploadify的使用

大概一年前,我还在用Asp.NET开发一些行业管理系统的时候,就曾经使用这个组件作为文件的上传操作,在随笔<Web开发中的文件上传组件uploadify的使用>中可以看到,Asp.NET中如何使用这个组件进行文件上传的,当时上传文件的处理主要也是使用ashx一般处理程序来进行处理的.本文主要介绍我的Web开发框架中,在MVC4的环境中如何集成这个非常棒的文件上传组件的. 1.上传组件uploadify的说明及脚本引用 Uploadify 是 JQuery 一个著名的上传插件,利用 Flash