我们正在迁移一个 ASP.NET MVC 应用程序,该应用程序具有通过 FileContentResult 在新选项卡中打开 PDF 的功能。
return new FileContentResult(byteArray, "application/pdf");
现在我们正在将此应用程序迁移到 React 并从 API(服务器端),我们发送回如下响应:-
response.Content = new ByteArrayContent(pdfByteArray);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
在 React UI 方面,我们使用如下响应:-
postData(POST_API_ENDPOINT, requestData, ((err, data) => {
if (data.ok) {
data.blob().then(function(myBlob) {
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
return window.navigator.msSaveOrOpenBlob(myBlob, "sample.pdf");
}
else {
var objectURL = URL.createObjectURL(myBlob);
return window.open(objectUrl);
}
});
}
}));
现在,我明白 msSaveOrOpenBlob 总是会提示用户在 IE11 中“打开/保存”。如果我需要在没有提示的情况下在不同的选项卡中打开 PDF,我还有哪些其他选择?
我想还有另一种方法可以通过以下方式做到这一点,但 URL 长度再次限制了这一点。
window.open("data:application/pdf;base64, " + base64EncodedPDF);