【问题标题】:Download a picture OnClick下载图片 OnClick
【发布时间】:2012-05-16 01:17:55
【问题描述】:

当您点击图片时,您如何实际下载图片?是否有某种 javascript 代码可以做到这一点?这是我使用纯 HTML 显示图像的方式。

<a href="#"><img src="myPic.png" border="0"></a>

【问题讨论】:

    标签: html download image


    【解决方案1】:

    假设“下载”是指“导致用户的浏览器弹出‘保存或打开’对话框”——你不能。

    您可以链接到提供相同文件但使用the Content-Disposition header set to attachment 的另一个URL。您将如何在该 URL 上提供此类资源的具体方式取决于提供给您的服务器端功能。

    【讨论】:

      【解决方案2】:

      大多数人右键单击图像并选择“将图像另存为...”

      另一种方法是链接以使用设置“Content-type”和“Content-disposition”标头的服务器端脚本。在 PHP 中,这将类似于来自 the docs 的这个示例:

      header('Content-Type: image/png'); // or 'image/jpg' or 'image/gif'
      header('Content-Disposition: attachment; filename="filename.png"');
      readfile('original.png');
      

      更新:既然你说图像首先是由 PHP 脚本生成的,那么有几个选项:

      • 将 URL (sig.php?...) 作为参数放入readfile。这意味着任何点击下载的人都会受到双重处理。
      • 将图像生成脚本的输出缓存到文件系统,然后将该文件传递给readfile
      • 编辑图像生成脚本以接受额外的参数,例如mode=download,然后在您将要输出图像的位置(如果存在该参数)设置上面的这两个标头。

      【讨论】:

      • 是的,但是当图片由 PHP 脚本创建时,我该怎么办?像这样:sig.php?user=test&anime=hellsing&color2=color_standard
      • 您将 readfile 行替换为生成图像的现有代码...
      • 我更新了答案,并针对您的其他问题提出了建议。
      【解决方案3】:

      我稍微骗了一点——我把图片压缩并放在某个地方。然后,我没有使用花哨的脚本或服务器端的东西,而是将图片的链接设置为 .zip 文件的位置。用户会收到警告/询问他们是否要下载此 zip,然后瞧……

      但这通常是在用户是想要图像的人的区域......

      【讨论】:

      • 我个人不相信在单击图像时下载 .zip 文件 - 这似乎是恶意的
      【解决方案4】:

      您想在新窗口/标签中打开图片吗?还是要将其下载到用户计算机?如果您希望用户保存图像,那么您需要设置他们收到的文件的内容类型:

      <?php
      $file = $_GET['file'];
      
      header("Content-Type: application/octet-stream; ");
      header("Content-Transfer-Encoding: binary"); 
      header('Content-Disposition: attachment; filename="'.basename($file).'"');
      readfile($file);
      ?>
      

      记得检查输入,这样人们就无法下载源文件。

      【讨论】:

      • 不,你没有。使用准确的内容类型和内容处置标头。此外,在编写包含巨大安全漏洞的示例时,请针对这些安全漏洞提供更突出的警告。
      • 是的,但是当图片由 PHP 脚本创建时,我该怎么办?像这样:sig.php?user=test&anime=hellsing&color2=color_standard
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      • 2016-02-25
      • 2010-11-23
      • 2012-12-31
      • 2013-08-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多