在智能手机和平板电脑中使用 header() 强制使用 php 下载图像

Posted

技术标签:

【中文标题】在智能手机和平板电脑中使用 header() 强制使用 php 下载图像【英文标题】:Force image download with php using header() in smartphones and tablets 【发布时间】:2013-10-26 11:11:11 【问题描述】:

我已经搜索了很长时间,但我还没有看到任何正确的答案。

我正在尝试在 php 中创建一个系统,用户可以在其中下载我在 JPG 中创建的 signPicture。 该程序在所有台式计算机上运行良好。即使是IE8也完全没有问题。

我使用的标题:

header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="test.jpg"');

最后我只是流式传输图片:

imagejpeg($imgSign,NULL,100);

正如我所说,它在每个浏览器中都运行得非常好。但是然后我们进入移动设备,例如在android中,下载一个test.jpg文件......但是它无法打开......和ipad一样(实际上没有下载,它在浏览器中显示图像并且比我保存它...但它也没有打开)。

我也尝试了更多我看到的例子,但没有改变任何东西,比如:

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download");
header("Content-Type: application/download");
header("Content-Transfer-Encoding: binary ");

知道如何在移动设备中解决这个问题吗?

谢谢!

【问题讨论】:

你保存了,但是打不开。你的意思是,文件没有创建?它是空的吗?它是否已创建但不起作用?它比它应该小吗?它的内容有什么奇怪的吗?到底发生了什么? 关于移动浏览器,请查看此答案:***.com/questions/10615797/… 了解更多详情 它保存文件,我可以看到它在手机或平板电脑中。但是当我尝试打开它时,它不可读,所以它说:你的图片不可读,或者,中间有JPG字符的黑屏......如果我将文件从手机发送到我的电脑,它也不是可读,但我可以看到它实际上有一个大小(它不为空)。 关于杰克的回答。我没有强制下载:“应用程序/强制下载”,它确实下载了......但它只是一个稍后不会打开的文件...... 【参考方案1】:

我明白了!

有不同的问题。我从这篇文章的 cmets 中找到了明确的解决方案: http://www.digiblog.de/2011/04/android-and-the-download-file-headers/

header("Content-Type: application/octet-stream");
header('Content-Disposition: attachment; filename="test.JPG"');

重要步骤:我用表格发送所有内容。该表单要使其在手机中工作,需要具有 target='_top' 和 method='get'

如果扩展名(jpg)不是大写且文件名不在“”之间,也会出错。

现在它适用于我迄今为止尝试过的所有设备。 :)

特别感谢这篇文章的作者 Jörg Wagner。

【讨论】:

不错的建议,但这不起作用。在 ios 上,图像显示在浏览器中,但未下载(无需用户保存)。

以上是关于在智能手机和平板电脑中使用 header() 强制使用 php 下载图像的主要内容,如果未能解决你的问题,请参考以下文章

电脑上怎么刷机vivo安卓手机

如何强制高 DPI 手机在引导程序中打开 xs 布局

Android:允许平板电脑纵向和横向,但在手机上强制纵向?

智能手机 平板电脑 MP3等 里面的 是 SSD 还是 NAND ,SSD与nand是啥关系,与nor无关是么

智能手机和掌上电脑的安全威胁日益增加

表单提交按钮在智能手机上不起作用