如何强制用户下载图像(如下载pdf)?

时间:2009-12-22 03:29:42

标签: php jquery

所以我写了一个图像库,其中包含下载原始图像的选项(默认情况下,它会显示图像的调整大小的版本)。我很想知道如何

以下代码将强制用户保存pdf而不是使用浏览器查看它,我希望通过使用jQuery绑定click操作来实现对图像(jpg,gif,png)的相同效果,我将如何能够这样做?

取自php.net

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

HTML:

<div class="download">
<a href="http://www.xyz/abc.jpg">
    Download original image</a>
</div>

JS:

$(".download").click(function(){
  // call a php to download the image
});

有可能这样做吗?

编辑:我应该在javascript代码中做什么?

3 个答案:

答案 0 :(得分:3)

这是可能的。服务器(PHP脚本)需要在第一个代码段中显示Content-Disposition标头。例如:

header('Content-Disposition: attachment; filename="abc.jpg"');

答案 1 :(得分:2)

这是可能的,但IE(多么令人惊讶......)有一个微妙的错误:

<?php
header( 'Content-Type: ' . $your_content_type . '; charset=UTF-8' );
if( strpos($_SERVER['HTTP_USER_AGENT'],'MSIE') !== false ) header( 'Content-Disposition: attachment; filename="'.rawurlencode($your_filename).'"' );
else header( 'Content-Disposition: attachment; filename="'.addslashes($your_filename).'"' );
?>

编辑:在javascript中无处可做!只需让用户单击图像的URL,或者只是添加一个单击处理程序,将浏览器发送到图像URL! 在客户端/浏览器端,您无法决定是否应下载或显示网址!

答案 2 :(得分:1)

通常,浏览器根据MIME类型决定显示或下载。所以我认为这就是你想要的:

  

如果您只想强制下载   使用header()函数来设置   内容类型   应用/八位字节流。

     

Internet Explorer的MIME类型支持   坏了,所以它没有反应   以上。但是,如果你另外   使用Content-Disposition标题   也可以强迫MSIE 5下载   文件。

     

此标题还允许您指定   文件名。这适用于两者   Netscape和MSIE 5。

     

标题(“内容处置:   附件;文件名= \ “myfile.abc \”“);

编辑:这里有一些有趣的信息,虽然它可能与您的具体用例无关:

  

如果满足以下条件,则会出现此问题:

     

内容中的文件名   处置标头使用双字节   字符集(DBCS)字符等   作为日文字符。第二   任何一个字节,或“trailbyte”   DBCS字符包含值   表示文件系统保留   ASCII中的字符。例如,   “trailbyte”包含值   表示ASCII值,例如0x5c或   0x7c。

编辑2:如果您只对在客户端上执行此操作感兴趣,请在此处回答:Force Mime Type in Browser (with Javascript)