AngularJS拦截器@q不处理多部分请求?

时间:2014-09-28 10:16:47

标签: angularjs multipartform-data

我有一个工作正常的拦截器,并为我的所有请求添加了身份验证标头。

全部?嗯,我是这么认为的。但是现在我在我的应用程序中添加了文件上传功能,在上传文件时我无法看到拦截器。

发送文件上传请求,服务器响应401访问被拒绝。

这是我的拦截器:

utilsModule.factory('AuthInterceptor',
  ['$q', 'AuthService', 'CacheCredentialsService',
  function($q, AuthService, CacheCredentialsService) {
    return {
      'request': function(config) {
        console.log("Intercepting request", config);
        if (config.url.indexOf("admins/login") == -1) {
          console.log("Adding authentication headers");
          config.headers.Authorization = AuthService.getCredentialsHeaders(CacheCredentialsService.getLoggedInAdminEmail(), CacheCredentialsService.getLoggedInAdminPassword());
        } else {
          config.headers.Authorization = '';
        }

        return config;
      },
      'requestError': function(rejection) {
        return $q.reject(rejection);
      },
      'response': function(response) {
        return response;
      },
      'responseError': function(rejection) {
        if (rejection.status == 401) {
          CacheCredentialsService.destroyLoggedInAdmin();
        }
        return $q.reject(rejection);
      }
    }
  }
]);

上传请求中没有显示任何控制台日志语句(它们都在所有其他请求中)。

浏览器控制台日志中显示的所有上传请求标头:

POST /nitro-project-rest/bts/upload HTTP/1.1
Host: localhost:8080
Connection: keep-alive
Content-Length: 299
Origin: http://localhost:9000
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryf1GHBVkgYB1HbK2I
Accept: */*
Referer: http://localhost:9000/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,fr;q=0.6,es;q=0.4,et;q=0.2,nb;q=0.2,ru;q=0.2,sv;q=0.2,it;q=0.2,de;q=0.2

上传请求有效负载:

------WebKitFormBoundaryf1GHBVkgYB1HbK2I
Content-Disposition: form-data; name="file"; filename="europlasma.txt"
Content-Type: text/plain

1 个答案:

答案 0 :(得分:2)

由于Angular-File Upload不使用Angular $http服务,因此您唯一的选择就是使用 FileUploader 服务中的属性。

var uploader = new FileUploader({
    headers: {
       Authorization: 'Bearer Your-token'
    },
    formData: {
       extraData: 'This is an extra data'
    }
});

uploader.onErrorItem = function(item, response, status, headers) {
    if(status === 401) {
        // do your thing
    }
};