首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular 2文件下载

Angular 2文件下载
EN

Stack Overflow用户
提问于 2018-01-12 19:16:39
回答 1查看 655关注 0票数 0

我正在尝试从rest服务下载一个文件(可以是任何格式),我可以检索并保存该文件,但格式始终是XML文件,也是我在windows中未打开的文件。

代码语言:javascript
复制
ngOnInit() {
    this.downloading();
}

downloading() {
    this.route.params
    .switchMap((params: Params) =>
        this.service.downloadFile(params["ao_id"], params["id"])
    )
    .subscribe(blob => {

        importedSaveAs(blob, this.fileName);

        var fileURL = URL.createObjectURL(blob);
        window.open(fileURL);
    });
}

downloadfile() {
    this.route.params
    .switchMap((params: Params) =>
        this.service.getMyFileFromBackend(params["ao_id"], params["id"])
    )
    .subscribe(
        res => this.extractData(res),
        (error: any) => Observable.throw(error || "Server error")
    );
}

在myservice中

代码语言:javascript
复制
downloadFile(ao_id: string, id: string): Observable<Blob> {
    const cpHeaders = new Headers({
        "Content-Type": "application/x-www-form-urlencoded"
    });
    let cpParams: URLSearchParams = new URLSearchParams();
    cpParams.set("ao_id", ao_id);
    cpParams.set("type", id);

    const options = new RequestOptions({
        headers: cpHeaders,
        search: cpParams,
        responseType: ResponseContentType.Blob
    });
    return this.http
    .get(this.downloadUrl, options)
    .map(res => res.blob())
    .catch(this.handleError);
}
EN

回答 1

Stack Overflow用户

发布于 2018-01-12 19:31:36

您可以使用以下代码下载任何文件。

代码语言:javascript
复制
public downloadFile(ao_id: string, id: string) {    
            let downloadUrl= '<url with query param>';
            return Observable.create(observer => {
                let xhr = new XMLHttpRequest();

                xhr.open('GET', downloadUrl, true);
                xhr.setRequestHeader('Content-type', 'application/json');
                xhr.responseType='blob';

                xhr.onreadystatechange = function () {
                  if (xhr.readyState === 4) {
                    if (xhr.status === 200) { 
                        debugger;
                      var contentType = 'application/octet-stream';
                      var blob = new Blob([xhr.response], { type: contentType 
                    });
                      observer.next(blob);
                      observer.complete();
                      return observer;

                    } else {
                      observer.error(xhr.response);
                    }
                  }
                }
                debugger;
                xhr.send();
              });
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48225153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档