簡體   English   中英

無法下載 chrome 瀏覽器中顯示的 base64 編碼的 pdf

[英]Cannot download base64 encoded pdf displayed in chrome browser

我在內置的 chrome 查看器中顯示 base64 編碼的文件。 無論是 jpg 還是 PDF,我都無法通過按鈕或右鍵單擊來下載它。 但是,所有其他功能(例如旋轉和打印)都可以使用。顯示的選項卡標題也只是帶有微調器的“正在加載”。 我可以在 firefox 中很好地下載它。

let fileDisplayUrl = '<iframe src="' + 'data:' + mimeType + ';base64,' + base64Contents + '"frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;"></iframe>';
let win = window.open();       
win.document.write(fileDisplayUrl);

我認為這是由於我展示它的方式所致,但我還沒有通過其他方式獲得成功。

編輯:將這些作為 object 和 img 標簽進行了嘗試,並且在這些標簽上出現了同樣的問題。

您的實際問題更像是您無法從新窗口下載通過data: -URI。 旁注:微調器可以通過close() -ing 文檔停止,但它不會影響不可操作的“另存為”。

我發現了兩個解決方法:

  1. 在當前窗口中打開數據(“iframe”按鈕執行此操作,然后可以通過右鍵單擊下載文檔,盡管其名稱在 Chrome 中默認為“download.pdf”)。 短文檔/小圖像可能是一個選項
  2. 可以提供一個明確的下載按鈕,在這種情況下也可以提供一個文件名。 “窗口(選項卡)”按鈕在示例中執行此操作。 雖然通常將完全相同的編碼數據移動兩次看起來不太好,但畢竟它發生在瀏覽器本地

<!DOCTYPE html>
<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script>
            let pdf="JVBERi0xLjIgCjkgMCBvYmoKPDwKPj4Kc3RyZWFtCkJULyA5IFRmKFRlc3QpJyBFVAplbmRzdHJlYW0KZW5kb2JqCjQgMCBvYmoKPDwKL1R5cGUgL1BhZ2UKL1BhcmVudCA1IDAgUgovQ29udGVudHMgOSAwIFIKPj4KZW5kb2JqCjUgMCBvYmoKPDwKL0tpZHMgWzQgMCBSIF0KL0NvdW50IDEKL1R5cGUgL1BhZ2VzCi9NZWRpYUJveCBbIDAgMCA5OSA5IF0KPj4KZW5kb2JqCjMgMCBvYmoKPDwKL1BhZ2VzIDUgMCBSCi9UeXBlIC9DYXRhbG9nCj4+CmVuZG9iagp0cmFpbGVyCjw8Ci9Sb290IDMgMCBSCj4+CiUlRU9G";
            function doFrame(){
                let frm=document.createElement("iframe");
                frm.style="border-color:black";
                frm.src="data:application/pdf;base64,"+pdf;
                document.body.appendChild(frm);
            }
            function doWindow(){
                let wnd=open("",Date.now());
                let doc=wnd.document.open();
                doc.write("<a href='data:application/pdf;base64,"+pdf+"' download='small.pdf'>Download</a><br>");
                doc.write("Object<br><object type='application/pdf' data='data:application/pdf;base64,"+pdf+"'></object><br>");
                doc.write("Embed<br><embed type='application/pdf' src='data:application/pdf;base64,"+pdf+"'><br>");
                doc.write("IFrame<br><iframe src='data:application/pdf;base64,"+pdf+"'/>");
                doc.close();
            }
        </script>
    </head>
    <body>
        <button onclick="doWindow()">window(tab)</button><br>
        <button onclick="doFrame()">iframe</button><br>
    </body>
</html>

它不是可運行的代碼片段,因為此處(在 StackOverflow 上)的安全沙箱會阻止這兩種嘗試。
“window(tab)”變體也將 pdf 作為objectembediframe打開,我可以確認 Chrome 中的右鍵單擊+“另存為”不會對它們執行任何操作。 下載按鈕有效(同樣,至少在 Chrome 中)。

我在內置的 chrome 查看器中顯示 base64 編碼的文件。 無論是 jpg 還是 PDF,我都無法通過按鈕或右鍵單擊下載它。 但是,所有其他功能(例如旋轉和打印)都可以工作。顯示的選項卡標題也只是帶有微調器的“正在加載”。 我可以在firefox中下載它就好了。

let fileDisplayUrl = '<iframe src="' + 'data:' + mimeType + ';base64,' + base64Contents + '"frameborder="0" style="border:0; top:0px; left:0px; bottom:0px; right:0px; width:100%; height:100%;"></iframe>';
let win = window.open();       
win.document.write(fileDisplayUrl);

我認為這是由於我展示它的方式,但我還沒有其他方式的運氣。

編輯:嘗試將這些作為對象和 img 標簽以及相同的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM