【问题标题】:Prevent PDF auto download by idm using pdf.js防止 idm 使用 pdf.js 自动下载 PDF
【发布时间】:2015-04-29 20:55:04
【问题描述】:

我使用PDF.Js 嵌入PDF 文件进行预览,我从viewer.js 中删除了下载和打开文件的脚本,但是当我测试页面和PDF 文件尝试显示时,Internet 下载管理器下载它并中止预览..搜索后我发现使用object而不是iframe可能会解决问题,但它不起作用pdf查看器出现白色,我该怎么做才能防止自动下载?或使用其他方式(插件)显示 PDF 文件内容。

<iframe 
  class="pdf" 
  webkitallowfullscreen="" 
  mozallowfullscreen="" 
  allowfullscreen="" 
  frameborder="no" 
  width="'.$width.'" 
  height="'.$height.'" 
  src="'.$baseurl.'/assets/pdf/web/viewer.html?file='.urlencode($pdf_url).'" 
  data-src="'.$pdf_url.'">
  '.$pdf_url.'
</iframe>

【问题讨论】:

  • (1) - 点击“更多信息”并告诉我们“意外的服务器响应”部分显示的内容 (2) - 您是否尝试过其他浏览器?是同一个问题吗?
  • (1) PDF.js v1.0.1040 (build: 997096f) 消息:检索 PDF 时出现意外的服务器响应 (204)。 (2) 是的,我在 Firefox 上尝试过,也有同样的问题(互联网下载管理器有一个选项(自动下载(一些扩展文件)和 PDF),但我想阻止它。

标签: javascript pdf iframe pdf.js


【解决方案1】:

这与开发问题无关,这与用户特定环境有关。

问题:

使用 IDM ,任何以媒体扩展名结尾的 URL(例如 *.JPG , *.PNG , *.MP4 , *.WMV , *.PDF ..etc )都会被自动下载, 但是另一方面,如果用户没有安装IDM,文件将立即在浏览器窗口中查看。

可能的解决方案:

  1. 从 IDM 中删除 PDF 扩展处理程序,以防止自动下载,我认为图像解释得很好。

  1. 修改 PDF 链接的响应头,强制浏览器在其视图中查看 pdf,请考虑每个浏览器可能会处理不同的响应,有关此方法的更多详细信息可以找到 here .

最后说明:

作为开发人员,您不应该处理每个用户特定的环境,我们 假设当用户安装特定的应用程序来处理通用文件时 ,那么处理该申请是他/她的职责,而不是 开发者角色,因为如果你遵循这个算法,你就会跳进去 处理不同用户特定设置的无限循环。

【讨论】:

    【解决方案2】:

    只需从主文件中删除 .pdf 扩展名。 IDM 无法检测到它是什么类型的文件。但浏览器会处理它的原生方式。

    【讨论】:

      【解决方案3】:

      试试这个

      <embed src="'.$baseurl.'/assets/pdf/web/viewer.html?file='.urlencode($pdf_url).'" type="text/html" >
      

      【讨论】:

      • 我尝试了&lt;object width="400" height="400" data="targetfile"&gt;&lt;/object&gt; 取决于网上的许多解决方案,但查看器没有出现pdf文件。
      【解决方案4】:

      根据您的 cmets 判断,我认为您的 uri 可能不正确。
      您可以尝试用任何在线pdf文件替换uri,看看其余代码是否正常。

      如果您只想嵌入 PDF 对象,可以尝试使用 PDFobject.js。
      https://github.com/pipwerks/PDFObject
      http://pdfobject.com/instructions.php

      HTML

      <div id="my_pdf_object"
        class="pdf" 
        webkitallowfullscreen="" 
        mozallowfullscreen="" 
        allowfullscreen="" 
        frameborder="no" 
        width="'.$width.'" 
        height="'.$height.'" 
      >
        It appears you don't have Adobe Reader or PDF support in this web browser. 
        <a href="'.$baseurl.'/assets/pdf/web/viewer.html file='.urlencode($pdf_url).'">
        Click here to download the PDF</a>
      </div>
      

      JavaScript

      <script type="text/javascript">
        //loads pdf files for resume
        window.onload = function (){
          var success = new PDFObject({ 
            url: "'.$baseurl.'/assets/pdf/web/viewer.html?file='.urlencode($pdf_url).'" 
          }).embed("my_pdf_object");
        };
      </script>
      

      【讨论】:

        【解决方案5】:

        可以防止从 idm (PdfJs) 自动下载。 IDM找到扩展pdf文件所以我们需要将pdf文件转换为base-64,然后将pdf的base64读取到节点DOM src中:

        1.将您的文件 pdf 转换为 base64

        document.getElementById('myfiles').addEventListener('change', function(event){
        
        		var input = document.getElementById("myfiles"); 
        
        		var fReader = new FileReader();
        		fReader.readAsDataURL(input.files[0]);
        		fReader.onloadend = function(event){ 
            document.getElementById("base64").innerHTML = event.target.result;
        		 console.log(event.target.result); 
             
        		}
        	});
        <input type="file" name="files" id="myfiles" value=""><br>
        <textarea id="base64" cols="50"></textarea>

        2。将所有字符串base64放到txt文件中

        文件名.txt

        3.从文件 txt 中读取 base64 并粘贴到 iframe 或使用 viewer.js (PDF JS)

        -iframe 应该

        &lt;iframe scr="data:application/pdf,base64....."&gt;prevent download from idm&lt;/iframe&gt;

        -带有 PDF 查看器

         var xhr = new XMLHttpRequest();
             console.log(file);
             xhr.open('GET', folderFiles+filename+".txt", true);
             xhr.responseType = 'text';
             xhr.onload = function(e) {
             
                if (this.status == 200) {
             
                   PDFViewerApplication.open(this.response);     
                
                }
              };

        因此,IDM 不会因为找不到特定文件而自动强制下载 pdf 文件。 链接:https://github.com/sokhasen/ViewerPDF.git

        【讨论】:

        • 如果我的 PDF 文件大于 500MB 到 1GB 怎么办
        【解决方案6】:

        我建议你使用php删除文件扩展名然后使用viewer.html?file=file_path&amp;name查看pdf而不被idm拦截:

        $fileinfo = pathinfo($book['file']);
        $path_pdf=$fileInfo['dirname'];
        $name_pdf=$fileInfo['filename'];
        header('location: viewer.html?file='.$path_pdf.'/'.$name_pdf.'');
        

        【讨论】:

          【解决方案7】:

          只需使用&lt;embed /&gt; 替换&lt;iframe /&gt; 即可防止自动下载

          【讨论】:

            猜你喜欢
            • 2017-08-22
            • 2015-06-26
            • 2016-11-23
            • 1970-01-01
            • 2020-11-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多