本文转载自:萧萧寒 http://www.xiaoxiaohan.com/php/3.html

需求

在做项目的过程中,产品那边出于用户体验方面的考虑提出如下需求:用户通过点击一个按钮,直接弹出浏览器的下载保存窗口供用户下载自己的推广二维码。

当这个需求传达到技术部的时候,笔者第一个想到的方法就是通过a链接实现,因为网站的下载操作多数都是通过a链接实现的。

测试一:给a链接一张图片的绝对路径

试着把自己的代码编写到网页中并用浏览器打开,尝试了多个不同的浏览器,结果出其的一致:点击a链接之后出现的是图片预览,而不是期望中的下载保存窗口。

测试二:给a链接一张图片的相对路径

再次把自己的代码编写到网页中并用浏览器打开,同样尝试了多个不同的浏览器,和测试一不同的是:点击a链接之后火狐和谷歌浏览器可以直接弹出浏览器的下载保存窗口,而其它的一些浏览器如:IE、Safari等则是实现图片预览。

对于这样的结果,让人有点意外。网上搜索得知:浏览器会通过头信息进行判断,一旦没有找到头信息浏览器则根据自己的既定规则进行解析。如果浏览器能识别该文件,则会以相应的方式显示该文件;如果浏览器不能识别该文件,则会弹出下载保存窗口供用户进行下载保存。

为了达到浏览器兼容的目的,结合网站后台使用的语言,最终决定借助PHP实现,代码如下:

<?php$file = $_GET['file'];header('Content-type: octet/stream');header('Content-disposition: attachment; filename='.$file.';');header('Content-Length: '.filesize($file));readfile($file);exit;?>

将上面这段代码粘贴到新建的PHP文件中保存并命名为download.php以供HTML页面使用。然后,我们就可以在HTML代码中调用这个PHP文件实现点击a链接下载图片的操作了。

HTML代码如下:

<a href="download.php?file=demo.jpg">点击下载</a>

可以试试:点击下载

特别提醒:

1、写HTML代码的时候,一定要注意PHP文件的路径并保证你的服务器能够解析PHP文件;

2、建议下载路径采用相对路径,这样可以保证图片名字的初始化,使用绝对路径可能会出现图片下载完成后打不开等情况。

对于a链接直接引用图片相对路径和绝对路径点击之后浏览器表现不一致,笔者不是很了解其中的原委。如果你知道,欢迎留言解惑。

如何通过a链接实现图片下载相关推荐

  1. metabase 以链接或图片查看_Python下载微信公众号文章内的图片

    刚刚说过使用python下载微信公众号文章内的视频,有兴趣的同学可以查看上一篇文章,此处就不放文章的链接了. 下面我们继续说一下,如何提取微信公众号文章内的图片并进行下载,下面一起来看一下. 01目标 ...

  2. 关于图片下载报链接不安全的问题,SSL证书信任相关

    自定义TrustAllCerts 类实现X509TrustManager 接口,同时对外提供createSSLSocketFactory的方法,自定义TrustAllHostnameVerifier ...

  3. js前端根据链接生成二维码并转成图片下载

    js前端根据链接生成二维码并转成图片下载 依赖于jquery.jquery.qrcode.min.js 1.html <div class="qrcode"></ ...

  4. 无需代码即可实现Excel中图片链接的批量下载

    今天在使用腾讯文档收集截图时,发现导出的Excel表格中是一列图片链接,不能直观的看到上传的图片,上网找了很多方法,但大多数是通过敲代码的形式来实现图片链接的批量下载的,对于编程不厉害的我来说,实现起 ...

  5. android picasso源码下载,Picasso:一个专为Android制作的强大的图片下载和缓存库

    Picasso:一个专为Android打造的强大的图片下载和缓存库 简介 在Android应用中,图片消费了大量的资源,却为应用提供了很好的视觉体验.幸运的是,Picasso为你的应用提供了非常容易的 ...

  6. Node.js制作图片下载爬虫的一般步骤

    图片下载爬虫分两部分:爬页面和下载图片. 爬页面时先看网址是https还是http的,然后选择不同的内置对象:其次看编码,如果是charset=gb2312的网页就需要iconv帮忙转码,好在大部分都 ...

  7. Scrapy学习篇(九)之文件与图片下载

    Media Pipeline Scrapy为下载item中包含的文件(比如在爬取到产品时,同时也想保存对应的图片)提供了一个可重用的 item pipelines . 这些pipeline有些共同的方 ...

  8. Python—实训day4—爬虫案例3:贴吧图片下载

    6 xpath 首先需要安装Google的Chrome浏览器 6.1 安装xpath插件 把 xpath_helper_2_0_2.crx 修改后缀名为 xpath_helper_2_0_2.rar. ...

  9. Google TakeOut图片下载器

    目录 介绍 背景 使用应用程序 关于源代码 下载管理器 使用下载管理器 内部下载管理器 StartDownload()函数 TraverseFolderTree函数 RetrieveImage函数 I ...

  10. python 下载图片到内存卡_python-23:将图片下载到本地

    python-23 :将图片下载到本地 得到图片的网址之后我么你怎么将图片下载到本地 呢? 在 python 中我们使用 urllib 库里面的 urllib.urlretrieve() 函 数 又是 ...

最新文章

  1. 【青少年编程】黄羽恒:我要背单词
  2. markdown简明语法
  3. mac -- 安装OpenCV
  4. [高数][高昆轮][高等数学上][第二章-导数与微分]01.导数的定义
  5. 设计模式学习(十六) 模板方法模式
  6. python获取字典的值_Python:如何从pandas系列中获取字典中的值
  7. java中字符 的含义 有什么作用_Java中字符串常见题之String相关讲解
  8. (二)原生JS实现 - 事件类方法
  9. win7 nginx php 环境,win7下docker环境搭建nginx+php-fpm+easyswoole+lavarel开发环境
  10. nginx redis mysql_Nginx + Lua + Kafka + Redis + Mysql
  11. Leetcode刷题系列汇总
  12. andriod 自定义来电界面功能
  13. android截长屏后保存
  14. Win7 安装VS2005时 Dexplore安装失败的解决方法
  15. 百度地图点击出现圆圈
  16. 【开箱即用】HTML5教程
  17. 计算机定时开机关机设置,怎样设置电脑定时开机关机
  18. HDU 4238 区间dp
  19. reco-fetch
  20. ubuntu中firebox无法联网

热门文章

  1. 基于LabVIEW的轴承信号采集分析仪的设计
  2. 基于JavaWeb的3D网上模板商城
  3. 免费图床、mp3外链,音乐上传,QQ空间永久背景音乐,mp3联接
  4. 常见的国内外Linux服务器运维面板汇总
  5. 计算机键盘快速指南,菜鸟必看 Windows键盘快捷键入门指南
  6. Jquery实现可拖动进度条
  7. linux用管理员给用户权限,Linux普通用户获得管理员权限
  8. 计算机取证程序论文,计算机取证论文参考文献推荐 计算机取证论文参考文献哪里找...
  9. 融思杯 第三届 部分wp
  10. 极通Aipcconn已停止工作问题处理方法