javascript - 在新窗口中使用 jquery 显示从 Controller 返回的 PDF 流

标签 javascript jquery asp.net ajax window

我有一个 Controller 操作,它从 azure blobstorage 读取一个 .pdf 文件并将流对象返回给 $.ajax() 方法。

Controller 返回

var stream = blobStorage.OpenRead(filepath);
await FileAsync(stream, "application/pdf");

Ajax 调用和响应

$.ajax({
        type: "POST",
        url: "/PDFfile",
        data: { 'id': Id },
        dataType: "application/pdf",
        traditional: true,
        complete: function(data) {
            var w = window.open("data:application/pdf, " + escape(data.responseText));
            w.document.write(data.responseText);
            w.document.close();
        }
    });

但是,如果调用的是与所示相同的 Controller 操作,则文件会正确显示。

<a class="pull-right btn-link" target="_blank" data-bind="attr: { href: '/PDFfile/' + Id }"></a>

它可能看起来像一个重复的问题,但没有一个解决方案对我有用。 我得到的输出如图所示。 enter image description here

最佳答案

我找不到这个问题的确切答案。我发现了一堆不同的问题。 我终于能够使用 fetch 拼凑起来了。 您需要接受 'arraybuffer' 类型,然后使用 resopnse.blob() 变成一个 blob。然后您可以在新窗口中打开 blob。

          fetch('/post/url', {
                        method: 'POST',
                        headers: {
                            Accept: 'arraybuffer',
                            'Content-Type': 'application/json',
                        },
                        //you need to use json here
                        body: JSON.stringify({ items: [{ ItemId: 3, Quantity: 40 }], fileId: 2 });
                    })
                        .then(response => response.blob())
                        .then(data => {
                            var popup = window.open(URL.createObjectURL(data), "height=500,width=750);

                   });

关于javascript - 在新窗口中使用 jquery 显示从 Controller 返回的 PDF 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37310855/

相关文章:

javascript - 从 JSX 函数返回数组并在其他地方解构它

javascript - 在 knockout js中展开一个元素并折叠所有其他元素

javascript - Node.Js 提示用户输入

jquery - 我想创建一个具有完整页面高度和宽度的 CSS 布局

javascript - Highcharts - 在缩放事件(选择)上显示标记并在重置缩放时隐藏。是否可以?

c# - 如何防止从 asp.net linkbutton 回发

javascript - 我遇到错误 Uncaught TypeError : Cannot read property 'toLowerCase' of undefined

javascript - 通过 browserify 为 node.js 捆绑文件不起作用

javascript - 如何使用 Dragula JS 插件更改拖动时复制的元素

c# - 在default.aspx中调用jquery