从WebAPI下载PDF的问题

时间:2017-05-07 07:21:23

标签: asp.net-web-api

我有一个WebApi后端。从我的客户端(TypeScript)我将表单数据发送到此后端,后端将使用该数据填写PDF表单并从PDF表单返回数据(不希望存储填充的PDF,因为它们将占用一个大量的空间,所以在我创建了一个包含所有字段的临时PDF后,我读取数据然后删除临时文件)。几年前我在MVC中做过这个,只是从控制器返回了一个File响应。但在WebApi中,我无法找到相同的内容。

在我的控制器中,我执行以下操作:

var response = new HttpResponseMessage(HttpStatusCode.OK);
                response.Content = new ByteArrayContent(pdfData);
                response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(DispositionTypeNames.Attachment) { FileName = pdfWriter.PdfName };
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response.Content.Headers.ContentLength = (long)pdfData.Length;

                return response;

pdfWriter是我的课程,填写PDF表格。它返回PDF表单数据并保存应下载的PDF的名称。

在我的客户端,我尝试了在这个网站上找到的各种替代方案,但我无法按照我的意愿使用它:获取文件下载提示。

我尝试创建一个blob并在新窗口中打开blob,如下所示:

xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            var data = xhr.responseText;
            try {
                var blob = new Blob([data]);
                window.open(window.URL.createObjectURL(blob));
            }
            catch (ex) {
            }
        }
    };

但是这打开了显示实际PDF数据的窗口......

我在这个网站上尝试了另一个建议:

xhr.onreadystatechange = function () {
        if (xhr.readyState == 4) {
            var data = xhr.responseText;
            try {
                var blob = new Blob([data]);
                var link = document.createElement("a");
                link.href = window.URL.createObjectURL(blob);
                link.download = "filled-in-form.pdf";
                link.click();
            }
            catch (ex) {
            }
        }
    };

但是这产生了两个问题:首先,根据我的编译器,HTMLAnchorElement上不存在.download。所以我删除了它,但是代码只是与上面的代码一样,在另一个窗口中打开实际的PDF数据。

我可以在这里尝试其他解决方案吗?

0 个答案:

没有答案