Display PDF stream returned from controller using jquery in new window

后端 未结 2 1967
情话喂你
情话喂你 2021-02-06 10:22

I have a controller action which reads a .pdf file from azure blobstorage and returns stream object to the $.ajax() method.

Controller returns<

相关标签:
2条回答
  • 2021-02-06 10:51

    I couldnt find a exact answer to this question. I found a bunch of different questions. I finally was able to piece together by using fetch. You need to accept type 'arraybuffer', then you turn into a blob with resopnse.blob(). Then you can open the blob in a new window.

              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);
    
                       });
    
    0 讨论(0)
  • 2021-02-06 10:56

    Why don't you just use standard HTML? There's no need for Javascript here (as you created a standard <a> tag for initial trigger of action).

    Something like:

    <form action="/PDFfile" method="post" target="_blank">
        <input type="submit" value="Show me the file in a new tab/window!"/>
    </form>
    

    Notes:

    • be sure to set an header Content-Type: application/pdf in your Azure script, so that the browser will know it's a PDF
    • as @JamesBlond stated you may not see it if you don't have a browser's plugin to read PDF. But you'll have a nice download box, and the new tab will be closed automatically
    0 讨论(0)
提交回复
热议问题