如何强制文件在浏览器中打开而不是下载(pdf)?
有没有办法强制PDF文件打开浏览器时,选项“显示PDF浏览器”未选中?
我尝试使用embedded标记和iframe,但只有在选中该选项时才起作用。
有人知道我能做什么吗?
要向浏览器表明该文件应该在浏览器中查看:
Content-Type: application/pdf Content-Disposition: inline; filename="filename.pdf"
要下载文件而不是查看:
Content-Type: application/pdf Content-Disposition: attachment; filename="filename.pdf"
编辑:如果文件名包含特殊字符,如filename[1].pdf
,否则可能会打破浏览器处理响应的能力,文件名周围的引号是必需的。
如果你正在使用HTML5(我想现在每个人都使用它),有一个属性称为download
。
恩。 <a href="somepathto.pdf" download="filename">
这里的filename
是可选的,但是如果提供的话,它将把这个名称用于下载的文件。
正确的types是PDF的application/pdf
,而不是application/force-download
,这看起来像一些传统浏览器的黑客。 如果可以,请始终使用正确的mimetype。
如果您可以控制服务器代码:
- 强制下载/提示:使用
header("Content-Disposition", "attachment; filename=myfilename.myextension");
- 浏览器试图打开它:使用
header("Content-Disposition", "inline; filename=myfilename.myextension");
无法控制服务器代码:
- 使用HTML5下载属性 ,使用在视图端指定的自定义文件名。
注:我更喜欢在服务器端设置文件名,因为您可能有更多的信息,可以使用通用的代码。
如果你有Apache,把它添加到.htaccess文件中:
<FilesMatch "\.(?i:pdf)$"> ForceType application/octet-stream Header set Content-Disposition attachment </FilesMatch>
糟糕,我以前的post中有打字错误。
header("Content-Type: application/force-download"); header("Content-type: application/pdf"); header("Content-Disposition: inline; filename=\"".$name."\";");
如果您不希望浏览器提示用户,则使用“inline”作为第三个string,而不是“attachment”。 内联工作得很好。 PDF立即显示,而不要求用户点击打开。 我已经使用“附件”,这将提示用户打开,保存。 我试图改变浏览器设置螺母它不阻止提示。
你可以通过以下方式来做到这一点:
<a href="path_to_pdf file">Open Pdf</a>
如果pdf文件在某个文件夹内,并且该文件夹没有直接访问该文件夹中的文件的权限,则必须通过以下方式使用.htaccess
文件设置绕过某些文件访问:
<FilesMatch ".*\.(jpe?g|JPE?G|gif|GIF|png|PNG|swf|SWF|pdf|PDF)$" > Order Allow,Deny Allow from all </FilesMatch>
但现在只允许某些必要的文件。
我已经使用这个代码,它完美的工作。 希望它也能帮助你。 谢谢。 穆赫辛
我相信唯一不尊重这种设置的浏览器是Chrome,因为它具有内置的PDF查看器。
从rootfile打开downloads.php。
然后转到第186行并将其更改为以下内容:
if(preg_match("/\.jpg|\.gif|\.png|\.jpeg/i", $name)){ $mime = getimagesize($download_location); if(!empty($mime)) { header("Content-Type: {$mime['mime']}"); } } elseif(preg_match("/\.pdf/i", $name)){ header("Content-Type: application/force-download"); header("Content-type: application/pdf"); header("Content-Disposition: inline; filename=\"".$name."\";"); } else{ header("Content-Type: application/force-download"); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"".$name."\";"); }
这是ASP.NET MVC
在你的cshtml页面中:
<section> <h4><a href="@Url.Action("Download", "Document", new { id = @Model.GUID })"><i class="fa fa-download"></i> @Model.Name</a></h4> <object data="@Url.Action("View", "Document", new { id = @Model.GUID })" type="application/pdf" width="100%" height="800" class="col-md-12"> <h2>Your browser does not support viewing PDFs, click on the link above to download the document.</h2> </object> </section>
在你的控制器中:
public ActionResult Download(Guid id) { if (id == Guid.Empty) return null; var model = GetModel(id); return File(model.FilePath, "application/pdf", model.FileName); } public FileStreamResult View(Guid id) { if (id == Guid.Empty) return null; var model = GetModel(id); FileStream fs = new FileStream(model.FilePath, FileMode.Open, FileAccess.Read); return File(fs, "application/pdf"); }
如果您正在使用Codeigniter。
请设置
$ htmlpdf – >输出($ pdf_local_path,f); to $ htmlpdf – > Output(); 出口;
要么用
<embed src="file.pdf" />
如果embedded是一个选项或我的新插件,PIFF: https : //github.com/terrasoftlabs/piff
这里是强制一个文件在浏览器中查看在php中的另一种方法:
$extension = pathinfo($file_name, PATHINFO_EXTENSION); $url = 'uploads/'.$file_name; echo '<html>' .header('Content-Type: application/'.$extension).'<br>' .header('Content-Disposition: inline; filename="'.$file_name.'"').'<br>' .'<body>' .'<object style="overflow: hidden; height: 100%; width: 100%; position: absolute;" height="100%" width="100%" data="'.$url.'" type="application/'.$extension.'"> <embed src="'.$url.'" type="application/'.$extension.'" /> </object>' .'</body>' . '</html>';
我没有一个怪胎程序员的答案。
只需打开AdobeReader – >编辑 – >首选项 – > Internet然后切换到浏览器模式或不同浏览器的详细说明尝试在这里: https : //helpx.adobe.com/acrobat/using/display-pdf-browser-acrobat-xi html的
如果您链接到.PDF,它将在浏览器中打开。
如果该框未选中,则应链接到.zip以强制下载。
如果.zip不是一个选项,那么在PHP中使用头来强制下载
header('Content-Type: application/force-download'); header('Content-Description: File Transfer');