【问题标题】:how do I force users to download image (like downloading pdf)?如何强制用户下载图像(如下载 pdf)?
【发布时间】:2010-12-28 23:26:38
【问题描述】:

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

以下代码将强制用户保存 pdf 而不是使用浏览器查看它,我希望通过将点击操作与 jQuery 绑定来实现图像(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 代码中做什么?

【问题讨论】:

    标签: php jquery


    【解决方案1】:

    这是可能的。服务器(PHP 脚本)需要发送 Content-Disposition 标头,如您的第一个 sn-p 中所示。例如:

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

    【讨论】:

    • 感谢您的快速回复。我刚刚更新了我的问题。我想了解 javascript 代码,而不是 PHP。
    • 如果您调用 PHP 页面来实际提供图像,那么在 PHP 中这样做有什么问题?
    • 但是当文件名中有特殊字符时,这在 IE 上会失败。还有@Alix Axel:WTF 你在抱怨吗?
    • @Alon:我在问如何在 jquery 中使用 click 事件触发 php 代码。 @Alix:如果您不明白我的问题是什么,我很抱歉,也许我应该更清楚。我会要求提出更多问题以进行澄清,这是学习的方式,您的猜测对任何人都没有帮助。这是学习、分享的地方,而不是展示您的猜测能力的地方。
    【解决方案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! 在客户端/浏览器端,您无法决定是否应该下载或显示 URL!

    【讨论】:

      【解决方案3】:

      一般来说,显示或下载的决定是由浏览器根据 MIME 类型做出的。所以我认为这就是你想要的:

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

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

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

      header("内容配置: 附件;文件名=\"myfile.abc\"");

      编辑:这里有一些有趣的信息,尽管它可能与您的特定用例无关:

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

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

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

      【讨论】:

      • 我应该声明我不需要支持IE 6或以下,以上声明是否适用于IE 7+?
      • 我相信它没有改变 - 如果它不适合你,请告诉我
      猜你喜欢
      • 2012-08-16
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      相关资源
      最近更新 更多