首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用angular 2和.Net核心webapi下载PDF文件

使用angular 2和.Net核心webapi下载PDF文件
EN

Stack Overflow用户
提问于 2017-03-07 19:49:14
回答 2查看 7.3K关注 0票数 5

我正在尝试下载PDF (以及后来的word,excel和图像)文件使用角2与.Net核心web api。我在这里粘贴了一些下载文件的代码示例,但当我试图打开下载的文件时,它给出了损坏的文件。

下面是我的.net核心web api代码

代码语言:javascript
运行
复制
public HttpResponseMessage GetTestPdfFile()
        {
            var response = new HttpResponseMessage(HttpStatusCode.OK);
            response.Content = new ByteArrayContent(myArray); //byte[] myArray is byte[] of file downloaded from Azure blob
            //response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("inline");
            response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
            response.Content.Headers.ContentDisposition.FileName = myFileName;
            response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/pdf");
            return response;
        }

我还尝试了另一个代码示例。

代码语言:javascript
运行
复制
public FileResult TestDownload(int id)
        {
            HttpContext.Response.ContentType = "application/pdf";
            FileContentResult result = new FileContentResult(myArray, "application/pdf")
            {
                FileDownloadName = "test.pdf"
            };

            return result;
        }

这是我在angular服务中所拥有的

代码语言:javascript
运行
复制
getTestPdfFile(): Observable<any> {
        let url = 'API_URL'
        let headers1 = new Headers();
        headers1.append('Content-Type', 'application/pdf');
        headers1.append('responseType', 'arrayBuffer');

        return this.http.get(url, {headers: headers1})
            .map(res => {
                var contentType = 'application/pdf';
                var blob = new Blob([res.arrayBuffer()], { type: contentType });
                return blob;
            })
    }

这就是我订阅obsevable的方式

代码语言:javascript
运行
复制
this.myService.getTestPdfFile()
        .subscribe(blob => {
                var link=document.createElement('a');
                link.href=window.URL.createObjectURL(blob);
                link.download="Test.pdf";
                link.click();
            }, error => {});
    }
EN

回答 2

Stack Overflow用户

发布于 2017-03-07 20:02:59

我不得不把我的角度服务改到下面,一切都很好。

代码语言:javascript
运行
复制
getTestPdfFile(): Observable<any> {
        let url = 'API_URL'
        return this.http.get(url, { responseType: ResponseContentType.Blob })
                        .map(res => res.blob())
                        .catch(this.handleError)
    }

我正在使用它作为我的web api

代码语言:javascript
运行
复制
public FileResult TestDownload(int id)
        {
            HttpContext.Response.ContentType = "application/pdf";
            FileContentResult result = new FileContentResult(myArray, "application/pdf")
            {
                FileDownloadName = "test.pdf"
            };

            return result;
        }
票数 7
EN

Stack Overflow用户

发布于 2017-03-07 19:57:40

我从来没有幸运地使用observables下载过项目。我所做的是使用window.open("http://urlToDocument.Test.pdf", "_blank")。这将在新选项卡中下载或提示下载文件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42647562

复制
相关文章

相似问题

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