zoukankan      html  css  js  c++  java
  • jQuery-File-Upload外部按钮触发上传

    这个控件功能还不错,但是对于外部调用上传有点压力。

    比如说,他可以实现在添加一个文件后为文件添加一个上传按钮,这个是写在add中的,可以调用data.submit()提交数据

    但是如果我要实现外部按钮点击时触发这个data.submit()就有压力了。

    有两种方式:

    1、想办法保存data,在外部事件触发时,调用到这个data并submit。

    2、想办法为该外部按钮在add时注册一个事件,并在点击时触发这个事件后submit()

    3、生成一个隐藏button,在外部事件触发时,调用这个button.click()即可。但是要注意重复绑定的问题,要先清除一下事件。

    (典型应用,一个表单中有一个上传输入框,我想调用这个上传输入框的进度事件,用默认的提交有点不方便,就需要使用这个控件,但是在使用控件后,提交时就会因为控件的原因,要么提交后取不到文件(加入add,submit等之后),要么能上传,但是进度无事件(不加任何属性))。

    现在的要求是,点击外部上传按钮,调用这个控件来上传。

    研究upload-ui源码后,发现他是调用了jQuery.data来保存对象,相当于第一种方法:

    add: function (e, data) {
                    if (e.isDefaultPrevented()) {
                        return false;
                    }
                    var $this = $(this),
                        that = $this.data('blueimp-fileupload') ||
                            $this.data('fileupload'),
                        options = that.options;
                    data.context = that._renderUpload(data.files)
                        .data('data', data)    //这里把数据绑定进去
                        .addClass('processing');
                    options.filesContainer[
                        options.prependFiles ? 'prepend' : 'append'
                    ](data.context);
                    that._forceReflow(data.context);
                    that._transition(data.context);
                    data.process(function () {
                        return $this.fileupload('process', data);
                    }).always(function () {
                        data.context.each(function (index) {
                            $(this).find('.size').text(
                                that._formatFileSize(data.files[index].size)
                            );
                        }).removeClass('processing');
                        that._renderPreviews(data);
                    }).done(function () {
                        data.context.find('.start').prop('disabled', false);
                        if ((that._trigger('added', e, data) !== false) &&
                                (options.autoUpload || data.autoUpload) &&
                                data.autoUpload !== false) {
                            data.submit();
                        }
                    }).fail(function () {
                        if (data.files.error) {
                            data.context.each(function (index) {
                                var error = data.files[index].error;
                                if (error) {
                                    $(this).find('.error').text(error);
                                }
                            });
                        }
                    });
                },

    这里绑定事件

     _initEventHandlers: function () {
                this._super();
                this._on(this.options.filesContainer, {
                    'click .start': this._startHandler,
                    'click .cancel': this._cancelHandler,
                    'click .delete': this._deleteHandler
                });
                this._initButtonBarEventHandlers();
            },

    这里是事件:

    _startHandler: function (e) {
                e.preventDefault();
                var button = $(e.currentTarget),
                    template = button.closest('.template-upload'),
                    data = template.data('data');
                button.prop('disabled', true);
                if (data && data.submit) {
                    data.submit();
                }
            },

    取到其中的data并提交。

    其实也可以调用send方法来发送,但是send方法的参数要求较高,

    $('#fileupload').fileupload('send', {files: filesList});

    要求参数filesList为 an object with an array (or array-like list) of File or Blobobjects as files property.

    同样添加时也可以直接添加文件列表,并可同时覆盖一部分属性

    $('#fileupload').fileupload('add', {files: filesList, url: '/path/to/upload/handler.json'});
    Retrieving overall progress data
    var overallProgress = $('#fileupload').fileupload('progress');
  • 相关阅读:
    openssl签署和自签署证书的多种实现方式
    OpenSSL主配置文件openssl.cnf
    openssl x509(签署和自签署)
    openssl rsautl和openssl pkeyutl(文件的非对称加密)
    openssl dgst(生成和验证数字签名)
    openssl passwd
    openssl speed和openssl rand
    openssl rsa/pkey
    openssl genrsa
    OpenSSL命令系列
  • 原文地址:https://www.cnblogs.com/guangshan/p/4534800.html
Copyright © 2011-2022 走看看