天天看點

extjs6 整合webuploader

先做一個上傳界面:

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width"
    <link href="~/Content/bootstrap.min.css" rel="stylesheet"
    <link rel="stylesheet" href="~/Content/css/wu.css"
    <script src="~/Scripts/jquery-1.12.4.min.js"></script>
    <link rel="stylesheet" type="text/css" href="~/Scripts/webuploader/webuploader.css">
    <script type="text/javascript" src="~/Scripts/webuploader/webuploader.js"></script>

    <style>.wu-example {
            position: relative;
            padding:15px;
            margin:15px 0;
            /*background-color: #fafafa;*/
            /*box-shadow: inset 0 3px 6px rgba(0, 0, 0, .05);*/
            /*border-color: #e5e5e5 #eee #eee;*/
            /*border-style: solid;*/
            /*border-width: 1px 0;*/
        }

        #picker {
            display: inline-block;
            line-height:1.428571429;
            vertical-align: middle;
            margin:0 12px 0 0;
        }

            #picker .webuploader-pick {
                padding:6px 12px;
                display: block;
            }</style>

    <script>var upType;
        var upFileUrl;
        $(document).ready(function ()
            window.parent.setUploadIframeId(window.frameElement.id);

            var GUID = WebUploader.Base.guid();
            var uploader = WebUploader.create({
                // swf檔案路徑
                swf: '/scripts/webuploader/Uploader.swf',
                // 檔案接收服務端。
                server: '/frame/UpFile',
                // 選擇檔案的按鈕。可選。
                // 内部根據目前運作是建立,可能是input元素,也可能是flash.
                pick: '#picker',
                //禁用拖拽上傳
                disableGlobalDnd: true,
                // 不壓縮image, 預設如果是jpeg,檔案上傳前會壓縮一把再上傳!
                resize: false,
                //分片
                chunked: true,
                //每片大小 2M
                chunkSize: 2097152,
                //單片失敗後重試次數
                chunkRetry: 5,
                //上傳并發線程數
                threads: 1,
                //可上傳檔案數量
                fileNumLimit: 1,
                //圖檔上傳之前不壓縮
                compress: false,
                formData: { guid: GUID, upType: upType }
            });

            // 當有檔案被添加進隊列的時候
            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('uploadSuccess', function (file, response)
                if (response.success) {
                    upFileUrl = response.data;
                    $('#' + file.id).find('p.state').html('已上傳:<a href=/frame/getfile?url=' + upFileUrl + ' target=_blank>' + upFileUrl + '</a>');
                }
            });

            uploader.on('uploadError', function (file)
                $('#' + file.id).find('p.state').text('上傳出錯');
            });

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


            $('#ctlBtn').on('click', function ()
                uploader.upload();
            });

            $('#btnReset').on('click', function ()
                uploader.reset();
                $('#thelist').html('');
            });
        })

        function setUpType(type)
            upType = type;
        }

        function getUpfile()
            return</script>
</head>
<body>

    <div id="uploader" class="wu-example">
        <!--用來存放檔案資訊-->
        <div id="thelist" class="uploader-list"></div>
        <div class="btns">
            <div id="picker">選擇檔案</div>
            <button id="ctlBtn" class="btn btn-default btn-sm">開始上傳</button>
        </div>

    </div>

</body>
</html>      

需要上傳功能的表單:

var showUp = function (record)
        var form = Ext.create('Ext.form.Panel', {
            url: '',
            layout: 'anchor',
            autoScroll: true,
            fieldDefaults: {
                labelWidth: 60,
                flex: 1,
                margin: 5
            },
            items: [{
                name: 'ID',
                xtype: 'hidden'
            }, {
                name: 'Url',
                xtype: 'hidden'
            }, {
                name: 'Name',
                xtype: 'displayfield',
                fieldLabel: '子系統'
            }, {
                name: 'Ver',
                xtype: 'textfield',
                fieldLabel: '版本',
                allowBlank: false
            }, {
                xtype: 'container',
                layout: 'hbox',
                items: [
                {
                    name: 'updiv',
                    xtype: 'displayfield',
                    fieldLabel: '檔案',
                    value: '',
                    flex: 1
                }, {
                    xtype: 'button',
                    text: '選擇檔案',
                    margin:'0 10 0 0',
                    handler: function ()
                        var iframeid = 'iframe_upload';
                        var content = '<iframe scrolling="auto" frameborder="0" id="'+iframeid+'"  src="/frame/uploadFile" style="width:100%;height:100%;"></iframe>';
                        var win_up = Ext.create('Ext.window.Window', {
                            title: '選擇檔案并上傳',
                            width: 350,
                            height: 250,
                            modal: true,
                            layout: 'fit',
                            items: [{
                                xtype: 'panel',
                                html:content
                            }],
                            buttons: [{
                                text: '确定',
                                handler: function ()
                                    var url = $('#' + iframeid)[0].contentWindow.getUpfile();
                                    form.getForm().findField('updiv').setValue('<a href=/frame/getfile?url=' + url + ' target=_blank>' + url + '</a>');
                                    form.getForm().findField('Url').setValue(url);
                                    win_up.close();
                                }
                            }]
                        }).show();
                    }
                }]
            }],
            buttons: [{
                text: '重置',
                handler: function ()
                    form.reset();
                }
            }, {
                text: '送出',
                formBind: true,
                disabled:true,
                handler: function ()

                }
            }]
        });

        var win = Ext.create('Ext.window.Window', {
            title: '上傳檔案',
            modal: true,
            width: 400,
            height: 200,
            closable: true,
            layout: 'fit',
            items: [form]
        }).show();

        form.getForm().findField('ID').setValue(record.data.ID);
        form.getForm().findField('Name').setValue(record.data.Name);
        form.getForm().findField('updiv').setValue('未選擇');

    }      
//向上傳視窗傳遞參數
function setUploadIframeId(iframeId)
    $('#' + iframeId)[0].contentWindow.setUpType('app');
}