百度 flash html5自切换 多文件异步上传控件webuploader基本用法

双核浏览器下在chrome内核中使用uploadify总有302问题,也不知道如何修复,之所以喜欢360浏览器是因为帮客户控制渲染内核:

若页面需默认用极速核,增加标签:<meta name="renderer" content="webkit">
若页面需默认用ie兼容内核,增加标签:<meta name="renderer" content="ie-comp">
若页面需默认用ie标准内核,增加标签:<meta name="renderer" content="ie-stand">

要解决302问题也很简单,就是html5的文件上传,正好最近在ueditor里看到百度的webuploader,会自动选择flash html5,就是一个成熟的解决方案了。

先看前端,我们将最常用的操作封装为插件,asp.net中和MVC中最好使用相对于应用程序的绝对路径,自行定义全局applicationPath :var applicationPath = "@(Href("~")=="/"?"":Href("~"))";

前端代码:

(function ($, applicationPath) {
    var applicationPath = applicationPath === "" ? "" : applicationPath || "../..";
    function initWebUpload(item, options) {
        var defaults = {
            hiddenInputId: "uploadifyHiddenInputId", // input hidden id
            onAllComplete: function (event) { }, // 当所有file都上传后执行的回调函数
            onComplete: function (event) { },// 每上传一个file的回调函数
            innerOptions: {},
            fileNumLimit: undefined,
            fileSizeLimit: undefined,
            fileSingleSizeLimit: undefined
        };

        var opts = $.extend({}, defaults, options);

        var target = $(item);
        var pickerid = guidGenerator().replace(/-/g, "");
        var uploaderStrdiv = ‘<div class="webuploader">‘ +
            ‘<div id="thelist" class="uploader-list"></div>‘ +
            ‘<div class="btns">‘ +
            ‘<div id="‘ + pickerid + ‘">选择文件</div>‘ +
            //‘<a id="ctlBtn" class="btn btn-default">开始上传</a>‘ +
            ‘</div>‘ +
        ‘</div>‘;
        target.append(uploaderStrdiv);

        var $list = target.find(‘#thelist‘),
             $btn = target.find(‘#ctlBtn‘),
             state = ‘pending‘,
             uploader;

        var jsonData = {
            fileList: []
        };

        var webuploaderoptions = $.extend({

            // swf文件路径
            swf: applicationPath + ‘/Scripts/lib/webuploader/Uploader.swf‘,

            // 文件接收服务端。
            server: applicationPath + ‘/MvcPages/WebUploader/Process‘,

            // 选择文件的按钮。可选。
            // 内部根据当前运行是创建,可能是input元素,也可能是flash.
            pick: ‘#‘ + pickerid,

            // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
            resize: false,
            fileNumLimit: opts.fileNumLimit,
            fileSizeLimit: opts.fileSizeLimit,
            fileSingleSizeLimit: opts.fileSingleSizeLimit
        },
        opts.innerOptions);
        var uploader = WebUploader.create(webuploaderoptions);

        uploader.on(‘fileQueued‘, function (file) {
            var $list = $("#thelist");
            $list.append(‘<div id="‘ + file.id + ‘" class="item">‘ +
                ‘<div class="info">‘ + file.name + ‘</div>‘ +
                ‘<div class="state">等待上传...</div>‘ +
                ‘<div class="del"></div>‘ +
            ‘</div>‘);
        });
        uploader.on(‘uploadProgress‘, function (file, percentage) {
            var $li = $(‘#‘ + file.id),
                $percent = $li.find(‘.progress .bar‘);

            // 避免重复创建
            if (!$percent.length) {
                $percent = $(‘<span class="progress">‘ +
                    ‘<span  class="percentage"><span class="text"></span>‘ +
                  ‘<span class="bar" role="progressbar" style="width: 0%">‘ +
                  ‘</span></span>‘ +
                ‘</span>‘).appendTo($li).find(‘.bar‘);
            }

            $li.find(‘div.state‘).text(‘上传中‘);
            //$li.find(".text").text(percentage * 100 + ‘%‘);
            $percent.css(‘width‘, percentage * 100 + ‘%‘);
        });
        uploader.on(‘uploadSuccess‘, function (file, response) {
            $(‘#‘ + file.id).find(‘div.state‘).text(‘已上传‘);
            var fileEvent = {
                queueId: file.id,
                name: file.name,
                size: file.size,
                type: file.type,
                filePath: response.filePath
            };
            jsonData.fileList.push(fileEvent)
            opts.onComplete(fileEvent);

        });

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

        uploader.on(‘uploadComplete‘, function (file) {
            $(‘#‘ + file.id).find(‘.progress‘).fadeOut();
            var fp = $("#" + opts.hiddenInputId);
            fp.val(JSON.stringify(jsonData));
            opts.onAllComplete(jsonData.fileList);
        });

        uploader.on(‘fileQueued‘, function (file) {
            uploader.upload();
        });

        uploader.on(‘filesQueued‘, function (file) {
            uploader.upload();
        });

        uploader.on(‘all‘, function (type) {
            if (type === ‘startUpload‘) {
                state = ‘uploading‘;
            } else if (type === ‘stopUpload‘) {
                state = ‘paused‘;
            } else if (type === ‘uploadFinished‘) {
                state = ‘done‘;
            }

            if (state === ‘uploading‘) {
                $btn.text(‘暂停上传‘);
            } else {
                $btn.text(‘开始上传‘);
            }
        });

        $btn.on(‘click‘, function () {
            if (state === ‘uploading‘) {
                uploader.stop();
            } else {
                uploader.upload();
            }
        });
        //删除
        $list.on("click", ".del", function () {
            var $ele = $(this);
            var id = $ele.parent().attr("id");
            var deletefile = {};
            $.each(jsonData.fileList, function (index, item) {
                if (item && item.queueId === id) {
                    deletefile = jsonData.fileList.splice(index, 1)[0];
                    $("#" + opts.hiddenInputId).val(JSON.stringify(jsonData));
                    $.post(/*自己发送处理删除指令*/, function (returndata) {
                        $ele.parent().remove();
                    });
                    return;
                }
            });
        });

    }

    $.fn.powerWebUpload = function (options) {

        var ele = this;
        $.lazyload(applicationPath + "/Scripts/lib/webuploader/webuploader.css", function () { }, ‘css‘);
        $.lazyLoad(applicationPath + "/Scripts/lib/webuploader/webuploader.min.js", function () {
            initWebUpload(ele, options);
        });

    }
})(jQuery, applicationPath);

  

MVC版后端文件接收,即便你是asp.net 引入mvc做ajax也是可以的:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace FormDesigner
{
    public class WebUploaderController : BaseController
    {
        public ActionResult Process(string id, string name, string type, string lastModifiedDate, int size)
        {
            string filePathName = string.Empty;
            string urlPath = "../../App_Upload/Document";
            string localPath = Path.Combine(HttpRuntime.AppDomainAppPath, "App_Upload\\Document");
            if (Request.Files.Count == 0)
            {
                return Json(new { jsonrpc = 2.0, error = new { code = 102, message = "保存失败" }, id = "id" });
            }
            try
            {
                filePathName = //自己在这里处理文件保存
            }
            catch (Exception)
            {
                return Json(new { jsonrpc = 2.0, error = new { code = 103, message = "保存失败" }, id = "id" });
            }

            return Json(new
            {
                jsonrpc = "2.0",
                id = "id",
                filePath = urlPath + "/" + filePathName
            });
        }
    }
}

  

页面后台就自己处理hiddenfiled的内容了。

百度 flash html5自切换 多文件异步上传控件webuploader基本用法,布布扣,bubuko.com

时间: 2024-08-07 06:43:49

百度 flash html5自切换 多文件异步上传控件webuploader基本用法的相关文章

jquery文件批量上传控件Uploadify3.2(java springMVC)

人比較懒  有用为主 不怎么排版了 先放上Uploadify的官网链接:http://www.uploadify.com/  -->里面能够看到PHP的演示样例,属性说明,以及控件下载地址.分flash版(免费)和html5版(收费). 官网上能够看到效果演示. 另外在网上找到了一份Uploadify3.2的中文API文档.能够在我上传的资源里面下载. 以下就是一个基于springMVC的文件上传演示样例,看起来可能比文档更直观一些··· 1.下载插件放到项目中 2.在jsp页面中引入下面JS和

百度上传控件webuploader的基本用法

http://www.cnblogs.com/gxrsprite/p/3816315.html http://www.open-open.com/lib/view/open1421293847328.html

HTML5实现图片文件异步上传

利用HTML5的新特点做文件异步上传非常简单方便,本文主要展示JS部分,html结构.下面的代码并未使用第三发库,如果有参照,请注意一些未展现出来的代码片段.我这边的效果预览: 1.文件未选择 2.文件已选择 HTML代码部分: 思路:下面代码中我利用css的z-index属性将input="file"标签隐藏在了id=btnSelect元素下面,通过触发a标签的点击后,弹出文件选择框.下面的masklayer用于点击确认按钮后的弹出层,避免用户重复点击确认按钮. <div id

使用ajaxfileupload.js文件异步上传文件

在服务器端做文件上传的过程中,如果使用web服务器短端的上传控件去上传文件的话,会导致页面刷新一次,这样对用户的体验就不是很友好了.ajaxfileupload.js是一款jQuery的异步上传文件插件,使用简单且容易上手. 前置条件:ajaxfileupload.js文件,百度下载一个就行. JS引用: <script src="/Content/JQueryJS/jquery-2.1.1.js"></script> <script src="

使用AjaxFileUpload.js实现文件异步上传

ajax是无法提交文件的,所以在上传图片并预览的时候,我们经常使用Ifame的方法实现看似异步的效果.但是这样总不是很方便的,AjaxFilleUpload.js对上面的方法进行了一个包装,使得我们不用去管理Iframe的一系列操作,也不用影响我们的页面结构,实现异步的文件提交. html: <input type="file" name="upload" hidden="hidden" id="file_upload"

SpringMVC + AJAX 实现多文件异步上传

转自:https://www.jianshu.com/p/f3987f0f471f 今天,我就这个问题来写一篇如何用 SpringMVC + AJAX 实现的多文件异步上传功能.基本的代码还是沿用上篇文章中所用到的项目,需要的朋友可以点击前面的链接查看.在这里只贴出关键代码. 首先我们要准备一个 JS 文件,即:ajaxfileupload.js,它需要用到 jQuery,所以我们还需要准备 jQuery 的库,两个文件在文末尾都有链接提供下载. JSP 关键代码: <li> <div&

文件的上传(表单上传和ajax文件异步上传)

一.表单上传: html客户端部分: <form action="upload.ashx" method="post" enctype="multipart/form-data"> 选择文件:<input type="file" name="file1" /><br /> <input type="submit" value="上传&q

对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件.在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+.两套运行时,同样的调用方式,可供

jquery文件上传控件 Uploadify

(转自 http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html) 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上版本,flash player 9.0.24以上. 有两个版本,一个用flash,一个是html5.html5的需要付费~所以这里只说flash版本的用法. 官网:http://www.uploadify.com/ 控件截图