使用 pdf.js 阻止 idm 自动下载 PDF
Prevent PDF auto download by idm using pdf.js
我正在使用 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>
试试这个
<embed src="'.$baseurl.'/assets/pdf/web/viewer.html?file='.urlencode($pdf_url).'" type="text/html" >
从您的评论来看,我认为您的 uri 可能不正确。
您可以尝试将 uri 替换为任何在线 pdf 文件,以查看其余代码是否正常。
如果您只想嵌入一个 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>
这与开发问题无关,这与用户特定环境有关。
问题:
使用 IDM ,任何以媒体扩展名结尾的 URL (例如 *.JPG 、 *.PNG 、 *.MP4 、 *.WMV 、 *. PDF ..etc) 将被自动下载,但是另一方面,如果用户没有安装 IDM,该文件将立即在浏览器中查看 window.
可能的解决方案:
- 从 IDM 中删除 PDF 扩展处理程序,以防止自动下载,我认为图像解释得很好。
- 修改您的 PDF 的响应 header link 以强制您的浏览器在其视图中查看 pdf,请考虑每个浏览器处理响应的方式可能不同,可以找到有关此方法的更多详细信息here.
最后的注释:
As a developer you shouldnt handle each user specific environment , we
suppose that when user installs a specific app to handle generic files
, then it is his/her role to handle that application , and not the
developer role , cause if you follow this algorithm you jump inside
infinite loop handling different users specific setup.
可以防止从 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 文件
filename.txt
3。从文件 txt 读取 base64 并传递到 iframe 或使用 viewer.js (PDF JS)
-iframe应该
<iframe scr="data:application/pdf,base64.....">prevent download from idm</iframe>
-使用 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 文件。
link : https://github.com/sokhasen/ViewerPDF.git
只需从主文件中删除 .pdf
扩展名。
IDM 无法检测到它是什么类型的文件。但浏览器将以其本机方式处理。
我建议您使用php删除文件扩展名然后使用viewer.html?file=file_path&name
查看pdf而不被idm拦截:
$fileinfo = pathinfo($book['file']);
$path_pdf=$fileInfo['dirname'];
$name_pdf=$fileInfo['filename'];
header('location: viewer.html?file='.$path_pdf.'/'.$name_pdf.'');
只需使用 <embed />
替换 <iframe />
即可防止自动下载
我正在使用 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>
试试这个
<embed src="'.$baseurl.'/assets/pdf/web/viewer.html?file='.urlencode($pdf_url).'" type="text/html" >
从您的评论来看,我认为您的 uri 可能不正确。
您可以尝试将 uri 替换为任何在线 pdf 文件,以查看其余代码是否正常。
如果您只想嵌入一个 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>
这与开发问题无关,这与用户特定环境有关。
问题:
使用 IDM ,任何以媒体扩展名结尾的 URL (例如 *.JPG 、 *.PNG 、 *.MP4 、 *.WMV 、 *. PDF ..etc) 将被自动下载,但是另一方面,如果用户没有安装 IDM,该文件将立即在浏览器中查看 window.
可能的解决方案:
- 从 IDM 中删除 PDF 扩展处理程序,以防止自动下载,我认为图像解释得很好。
- 修改您的 PDF 的响应 header link 以强制您的浏览器在其视图中查看 pdf,请考虑每个浏览器处理响应的方式可能不同,可以找到有关此方法的更多详细信息here.
最后的注释:
As a developer you shouldnt handle each user specific environment , we suppose that when user installs a specific app to handle generic files , then it is his/her role to handle that application , and not the developer role , cause if you follow this algorithm you jump inside infinite loop handling different users specific setup.
可以防止从 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 文件
filename.txt
3。从文件 txt 读取 base64 并传递到 iframe 或使用 viewer.js (PDF JS)
-iframe应该
<iframe scr="data:application/pdf,base64.....">prevent download from idm</iframe>
-使用 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 文件。 link : https://github.com/sokhasen/ViewerPDF.git
只需从主文件中删除 .pdf
扩展名。
IDM 无法检测到它是什么类型的文件。但浏览器将以其本机方式处理。
我建议您使用php删除文件扩展名然后使用viewer.html?file=file_path&name
查看pdf而不被idm拦截:
$fileinfo = pathinfo($book['file']);
$path_pdf=$fileInfo['dirname'];
$name_pdf=$fileInfo['filename'];
header('location: viewer.html?file='.$path_pdf.'/'.$name_pdf.'');
只需使用 <embed />
替换 <iframe />
即可防止自动下载