Angular 2跨域请求



我再次有Angular 2的问题,我需要您的帮助或提示。

我正在努力在内部应用程序中从Amazon S3下载文件,这意味着"所有"我的请求必须经过身份验证,因此我在我的app.component.ts.ts

中添加了此功能
public initInterceptor(): void {
    let _that = this;
    (function (open) {
        XMLHttpRequest.prototype.open = function () {
            this.addEventListener('readystatechange', function () {
                if (this.readyState === 4) {
                    switch (this.status) {
                        case 401:
                            _that.logout();
                            break;
                        case 200:
                            let token = this.getResponseHeader('Auth');
                            if (token && token != _that.user.token) {
                                _that.user.token = token;
                            }
                            break;
                    }
                }
            }, false);
            open.apply(this, arguments);
        };
    })(XMLHttpRequest.prototype.open);
}

,我的应用程序正常工作,直到我尝试称呼我的亚马逊URL,这当然没有" auth"标题,因为这是对亚马逊的直接调用,所以我的问题是...有没有办法在不检查Init Interceptor功能中的标头的情况下,请致电我的Amazon URL?就像流产XMLHTTPREQUEST暂时我得到了一些东西。我知道这似乎很奇怪,但是添加我不使用的标头是没有意义的。

我的下载及电话

downloadAttachment(downloadUrl: any): Observable<any> {
        return this.http.get(`${downloadUrl._body}`,{responseType: ResponseContentType.ArrayBuffer})
            .map(this.extractFile)
            .catch(error => Observable.throw(error.status));
    }
private extractFile(res: Response): Blob {
        let type = res.headers.get('content-type');
        return new Blob([res['_body']], {type: type});
    }

预先感谢!

this.responseURL的响应中获取URL。检查是否不是S3 URL,然后提取Auth标题

case 200:
    // replace the URL regex placeholder below
    if(!this.responseURL.match(**<Your S3 URL regex>**){
       let token = this.getResponseHeader('Auth');
       if (token && token != _that.user.token) {
         _that.user.token = token;
       }
    }

相关内容

  • 没有找到相关文章