所以我写了一个图像库,其中包含下载原始图像的选项(默认情况下,它会显示图像的调整大小的版本)。我很想知道如何
以下代码将强制用户保存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代码中做什么?
答案 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)