文件上传控件PlupLoad 的使用

       最近有用到一个PlupLoad 的文件上传控件,觉得还不错,但是找了很久网上也没有具体的使用方法或者说是很详细的使用方法,于是自己在完成功能之后就打算把这些方法给记录下来,以便后面需要使用的时候方便查看。以下简单介绍下这个上传控件。

       现在随着html5技术的逐渐推广和普及,再去使用以flash为上传手段的SWFUpload显然就有点过时了,毕竟html5原生的就给我们提供了文件上传的API。Plupload是一款由著名的web编辑器TinyMCE团队开发的上传组件,简单易用且功能强大,我们完全可以使用Plupload来代替以前的SWFUpload。

       Plupload有以下功能和特点:
            1、拥有多种上传方式:HTML5、flash、silverlight以及传统的<input type=”file” />。Plupload会自动侦测当前的环境,选择最合适的上传方式,并且会优先使用HTML5的方式。所以你完全不用去操心当前的浏览器支持哪些上传方式,Plupload会自动为你选择最合适的方式。
            2、支持以拖拽的方式来选取要上传的文件
            3、支持在前端压缩图片,即在图片文件还未上传之前就对它进行压缩
            4、可以直接读取原生的文件数据,这样的好处就是例如可以在图片文件还未上传之前就能把它显示在页面上预览
            5、支持把大文件切割成小片进行上传,因为有些浏览器对很大的文件比如几G的一些文件无法上传。


      以上的介绍就先到这里,接下来就是实战代码和具体用法,重头戏来了:

            1,首先需要引入PlupLoad.js 和 JQuery.js  的文件:

<link href="${pageContext.request.contextPath}/style/jquery_ui/jquery-ui.css" rel="stylesheet">
<script language="javascript" src="${pageContext.request.contextPath}/script/jquery-1.8.3.min.js"></script>
<script language="javascript" src="${pageContext.request.contextPath}/script/jquery_ui/jquery-ui.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/script/plupload/js/plupload.full.min.js"></script>
            2,在HTML 代码中的 BODY 标签内编写相应的代码:

<!-- ui-dialog -->
<div id="dialog" title="Dialog Title">
<s:form id="ImportReportDraftCurdActionWindowForm">
    <input type="hidden" id="types" name="types"/>
    <table width="480px">
        <tr>
            <td width="70px"><a href="/aml/excel/UserListTemplate.xls">下载模板</a></td>
            <td width="auto" colspan="3">
                <div id="ImportReportDraftCurdActionUploaderContainer">
                    <ul id="ImportReportDraftCurdAction_Files" style="padding-left: 0; padding-right: 0"></ul>
                    <input type="file" id="ImportReportDraftCurdActionBrowseBut" value="选择文件"/>
                </div>
            </td>
        </tr>
    </table>
</s:form>
</div>
<script type="text/javascript">
    var ImportReportDraftCurdActionUploader;
    var uploader = new plupload.Uploader({
        runtimes : 'html5,flash,silverlight,html4',
        browse_button : 'ImportReportDraftCurdActionBrowseBut', // you can pass in id...
        container: document.getElementById('ImportReportDraftCurdActionUploaderContainer'),
        url : '/report/uploadAttachment.action',
        chunk_size : '10mb',
        unique_names : true,
        // Resize images on client-side if we can
        resize : { width : 320, height : 240, quality : 90 },
        filters : {
            max_file_size : '10mb',
            // Specify what files to browse for
            mime_types: [
                {title : "Excel files", extensions : "xls"}
            ]
        },
        multi_selection : false,
        flash_swf_url : '${pageContext.request.contextPath}/script/plupload/js/Moxie.swf',
        file_data_name:'upload',
        silverlight_xap_url : '${pageContext.request.contextPath}/script/plupload/js/Moxie.xap',
        // Post init events, bound after the internal events
        init: {
            PostInit: function() {
                document.getElementById('uploadfileCancel').onclick = function() {
                    document.getElementById('ImportReportDraftCurdAction_Files').innerHTML="";

                    //$("input[name='Newfiless']").remove();
                    //$("#ImportReportDraftCurdAction_Files").remove("");
                    //$("#ImportReportDraftCurdActionUploaderContainer div:last").remove();

                    $("#dialog").dialog( "close" );
                };

                document.getElementById('uploadfileBtn').onclick = function() {
                    if ($("input[name='Newfiless']").length > 0) {
                        ImportReportDraftCurdActionSubmitForm(1);
                    } else {
                        alert("请选择1个文件!");
                    }
                };
            },
            FilesAdded: function(up, files) { //文件上传前
                if ($("input[name='Newfiless']").length>0) {
                    alert("只能上传一个文件");
                    uploader.removeFile(files[0]);
                    return false;
                }

                var fileList = $("#ImportReportDraftCurdAction_Files");
                plupload.each(files, function(file) {
                    if(file.status == plupload.FAILED) return true;
                    var $duplicatedFileItem = null;
                    fileList.children().each(function(j, fileItem) {
                        if (file.name == $(fileItem).children().last().text()) {
                            $duplicatedFileItem = $(fileItem);
                            return false;
                        } else {
                            return true;
                        }
                    });

                    if ($duplicatedFileItem != null) {
                        if (confirm("附件“" + file.name + "”已经存在,是否覆盖?")) {
                            var $fileNameLink = $duplicatedFileItem.find("a:last-child");
                            if ($fileNameLink.length) {
                                $("#ImportReportDraftCurdActionWindowForm").append("<input type='hidden' name='Deletedfiless' value='" + $fileNameLink.text() + "' />");
                            } else {
                                var duplicatedFile = up.getFile($duplicatedFileItem.attr("id"));
                                if (duplicatedFile.status == plupload.QUEUED) up.removeFile(duplicatedFile);
                            }
                            $duplicatedFileItem.remove();

                            appendFileItem(file, fileList);
                        } else {
                            up.removeFile(file);
                        }
                    } else {
                        appendFileItem(file, fileList);

                    }
                    return true;
                });
                up.refresh();
                if (up.state == plupload.STOPPED) up.start();
            },
            FileUploaded: function(up, file, response) { //文件上传成功的时候触发
                var $fileItem = $("#" + file.id);
                $fileItem.prepend("<input type='hidden' name='Newfiless' value='" + file.name + ":" + jQuery.parseJSON(response.response).fileName + "' />");
            },
            StateChanged: function(up) { //当上传队列的状态发生改变时触发
                if (up.state == plupload.STARTED) {
                    $("#uploadfileBtn").attr("disabled", true);
                } else {
                    $("#uploadfileBtn").attr("disabled", false);
                }
            },
            Error: function(up, err) { //上传出错的时候触发
                var errMsg;
                switch (err.code) {
                    case plupload.INIT_ERROR:
                        //stk.debug(err);
                        $("#ImportReportDraftCurdActionBrowseBut").remove();
                        errMsg = "您的浏览器版本过低,无法使用附件上传功能";
                        break;
                    case plupload.FILE_SIZE_ERROR:
                        //$("#" + err.file.id).remove();
                        errMsg = "文件“" + err.file.name + "”过大(上限:10 MB)";
                        break;
                    default:
                        if (err.file) {
                            $("#" + err.file.id).remove();
                            errMsg = "文件“" + err.file.name + "”上传时出现问题";
                        } else {
                            errMsg = "附件上传功能出现问题";
                        }
                }
                alert(errMsg);
            }
        }
    });
    ImportReportDraftCurdActionUploader = uploader;
    uploader.init();

    function appendFileItem(file, $fileList) {
        var $newListItem = $("<li />", {
            id: file.id,
            style: "padding: 0px 0px; width:265px; list-style:none; margin-left:3px;"
        });

        var $deleteLink = $("<a />", { // file may be in queue; uploading, or uploaded; fail code is not here
            href: "javascript:void(0)",
            html: "[删除]",
            style:"display:inline-block; width:55px; font-size:12px;"
        });

        $deleteLink.click(function () {
            var file = ImportReportDraftCurdActionUploader.getFile($(this).parent().attr("id"));
            if (file && file.status == plupload.QUEUED) ImportReportDraftCurdActionUploader.removeFile(file);
            $(this).parent().remove();
            ImportReportDraftCurdActionUploader.refresh();
        });
        $newListItem.append($deleteLink);
        $newListItem.append( "<span id=' + file.id + 'style='display: inline-block; text-align: left; margin: 0; padding: 0; margin-left: 2px; font-size:12px;'>"+ file.name+"</span>");
        $fileList.append($newListItem);
    }

    $("#dialog").dialog({
        title:"导入文档",
        autoOpen: false,
        width: 500,
        buttons: [
            {
                text: "保存",
                id: "uploadfileBtn"
            },
            {
                text: "取消",
                id: "uploadfileCancel"
            }
        ],
        using:function(){
            $(this).css({
                "position":"absolute",
                "top":"600px" //设置弹出框距离是页面顶端下的400px
            });
        }
    });

    function ImportReportDraftCurdActionSubmitForm(val){
        $.ajax({
            type: "POST",
            url: "userAction_importInit.action",
            dataType: "json",
            data: {"Newfiless":$("input[name='Newfiless']").val(),"type":val},
            success: function(result){
                if (result.result == "SUCCESS") {
                    alert("上传完毕!");
                    $("#dialog").dialog( "close" );
                    window.location.reload();
                    /*alert("上传完毕!", "提示", {"确认":function () {
                     $("#__alertDiv").dialog("close");
                     $(document).stk_removeSelf();
                     }});*/
                } else if(result.errorinfo!=null){
                    alert(result.errorinfo);
                } else {
                    for(var key in result){
                        alert(result[key]);
                    }
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){
                alert('===保存失败===');
            }
        });

        /*$("#types").val(val);
         $("#ImportReportDraftCurdActionWindowForm").submit();
         alert("上传成功!");*/

        /*$("#ImportReportDraftCurdActionWindowForm").stk_submit(function (result) {
         if (result.result == "SUCCESS") {
         stk.alert("上传完毕!", "提示", {"确认":function () {
         $("#__alertDiv").dialog("close");
         $(document).stk_removeSelf();
         }});
         } else if(result.errorinfo!=null){
         stk.error(result.errorinfo);
         } else {
         for(var key in result){
         stk.error(result[key]);
         }
         }
         });*/
    }
</script>

             3,具体大部分的代码就是这样了,当然我只是简单的把我成功后的代码Ctrl+C、Ctrl+V 了一下,如果你们想要跑通上面的代码,还是需要静下心来好好的调试一下。如果在调试的情况下有什么问题,可以评论我看到了话都会进行回复的哦!(PlupLoad的源文件及JQuery文件 http://download.csdn.net/detail/samile6899/9808344

   

           

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue3中使用Plupload的步骤如下: 1. 首先,你需要在项目中引入Plupload。你可以通过在GitHub上下载并安装Plupload,或者使用npm install --save plupload命令安装Plupload依赖。 2. 在Vue组件中实例化一个Plupload对象,并传入一个配置参数对象来进行各种配置。你可以根据需要配置上传方式、限制文件类型、压缩图片等功能。 3. 调用Plupload实例对象的init()方法进行初始化。这将初始化Plupload并准备好进行文件上传。 4. 在Plupload实例对象上注册你需要的事件。Plupload提供了多种事件,可以在文件选取、上传进度、上传完成等不同阶段与Plupload进行交互。 以下是一个在Vue3中使用Plupload的示例代码: ```vue <template> <div> <plupload :file-list="theDialogForm.attachJsonArr" :limit="1" biz-type="trainModule" accept-files=".zip,.rar,.xml,.txt,.pdf,.docx,.doc,.xlsx,.xls,.ppt,.pptx,.mp4,.mp3,.gif,.png,.jpg,.jpeg,.bmp" @onChange="handleFileChange" /> </div> </template> <script> import Plupload from 'plupload' // 引入Plupload库 export default { data() { return { theDialogForm: { attachJsonArr: [] // 文件列表 } } }, mounted() { const uploader = new Plupload({ // 实例化Plupload对象 // 配置参数 }) uploader.init() // 初始化Plupload // 注册事件 uploader.bind('FilesAdded', (uploader, files) => { // 当文件添加到上传队列时触发的事件 }) // 更多事件... }, methods: { handleFileChange(fileList) { console.log('handleFileChange', fileList) } } } </script> ``` 以上代码示例中,我们在Vue组件中引入了Plupload库,实例化了Plupload对象,并在mounted钩子函数中进行了初始化和事件的注册。同时,我们定义了一个handleFileChange方法来处理文件变化事件。你可以根据自己的需求进行相应的配置和事件处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值