如何强制文件在浏览器中打开而不是下载(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');