我有一个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数据。
我可以在这里尝试其他解决方案吗?