關於WebUploader上傳文件插件的headers.token攔截問題


WebUploader 事件說明

uploadBeforeSend
  • object {Object}
  • data {Object}

    默認的上傳參數,可以擴展此對象來控制上傳參數。

  • headers {Object}

    可以擴展此對象來控制上傳頭部。

當某個文件的分塊在發送前觸發,主要用來詢問是否要添加附帶參數,大文件在開起分片上傳的前提下此事件可能會觸發多次。

WebUploader   API文檔

angularjs中添加一個攔截器,比如說一下例子:

//增加一個提交token
sxApp.factory('sessionInjector', function ($rootScope,locals) {
    // Service logic$rootScope.sysuser.token
    var sessionInjector = {
        request: function(config) {
            config.headers.token =  locals.getObject("accessToken");
            if(config.method=="POST"){
                ... ...
            }
            return config;
        }
    };
    return sessionInjector;
});

這里的 headers.token 對WebUploader插件不起作用,這時就需要在WebUploader中對header進行配置,找到webuploader.js中的uploadBeforeSend 方法,在上傳操作方法_doSend 中定義的header中,添加headers.token = GlobalConfig.token;這一句代碼

             /**
             * @event uploadBeforeSend
             * @param {Object} object
             * @param {Object} data 默認的上傳參數,可以擴展此對象來控制上傳參數。
             * @param {Object} headers 可以擴展此對象來控制上傳頭部。
             * @description 當某個文件的分塊在發送前觸發,主要用來詢問是否要添加附帶參數,大文件在開起分片上傳的前提下此事件可能會觸發多次。
             * @for  Uploader
             */

            // 做上傳操作。
            _doSend: function( block ) {
                var me = this,
                    owner = me.owner,
                    opts = me.options,
                    file = block.file,
                    tr = new Transport( opts ),
                    data = $.extend({}, opts.formData ),
                    headers = $.extend({}, opts.headers ),
                    requestAccept, ret;

                headers.token = GlobalConfig.token;
                block.transport = tr;

                tr.on( 'destroy', function() {
                    delete block.transport;
                    me._popBlock( block );
                    Base.nextTick( me.__tick );
                });

注意:由於angularjs和jQuery之間傳值比較麻煩,在這里就申明了一個全局變量GlobalConfig.token在angularjs和jQuery之間傳值。

在config.js中申明一個全局變量:

function GlobalConfig(){

}
GlobalConfig.token="";
(function(){

})();

在app.js中傳值:

GlobalConfig.token = locals.getObject("accessToken");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM