2017-02-20 147 views
0

我有這樣的HTTP請求的攔截器:圖片GET請求攔截

var app = angular.module('mobApp.services'); 
app.factory('httpRequestInterceptor', function($q, $injector) { 
    return { 
    request: function(config) { 
     var utils = $injector.get('Utils'), 
     userDetails = utils.getCurrentUserDetails(); 
     config.headers.Authorization = "Token 12309123019238"; 
     if(userDetails) { 
     config.headers['X-AccessKey'] = userDetails.apiKey; 
     config.headers['X-UserId'] = userDetails.id; 
     } 
     return config; 
    } 
    } 

}); 

app.config(['$httpProvider', function($httpProvider) { 
    $httpProvider.interceptors.push('httpRequestInterceptor'); 
}]); 

它添加X-頭到所有GET/POST請求除了一個圖像GET請求。爲什麼?

回答

1

我的猜測是,你想從一個 <img ng-src="someurl"/>標籤

攔截請求在這種情況下,你需要http-src="someurl"

否則,這些不會$http被取出更換ng-src="someurl",因而無法通過您的攔截

,使這項工作需要自定義指令:

app.directive('httpSrc', [ 
     '$http', function ($http) { 
      var directive = { 
       link: link, 
       restrict: 'A' 
      }; 
      return directive; 

      function link(scope, element, attrs) { 
       var requestConfig = { 
        method: 'Get', 
        url: attrs.httpSrc, 
        responseType: 'arraybuffer', 
        cache: 'true' 
       }; 

       $http(requestConfig) 
        .success(function(data) { 
         var arr = new Uint8Array(data); 

         var raw = ''; 
         var i, j, subArray, chunk = 5000; 
         for (i = 0, j = arr.length; i < j; i += chunk) { 
          subArray = arr.subarray(i, i + chunk); 
          raw += String.fromCharCode.apply(null, subArray); 
         } 

         var b64 = btoa(raw); 

         attrs.$set('src', "data:image/jpeg;base64," + b64); 
        }); 
      } 

     } 
    ]);