当前位置: 首页 > 知识库问答 >
问题:

html5下载和php下载不能在移动设备上运行

包谭三
2023-03-14

在我的站点上,我有一个 链接,还有一个php函数可以很好地下载桌面上的文件-

ob_start();

$nameOld = 'https://my-other-server.online/path/to/file.mp4';
$save = '/var/path/to/file.mp4';
$nameNew = "download.mp4";

file_put_contents($save, fopen($nameOld, 'r'));

set_time_limit(0);

header('Connection: Keep-Alive');
header('Content-Description: File Transfer');
header('Content-Type: application/force-download');
header("Content-Disposition: attachment; filename=$nameNew");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($save));

      while (ob_get_level()) {
        ob_end_clean();
      }

readfile($save);
exit;

unlink($save);

在移动设备(iphone)上,这在chrome浏览器上是行不通的。(我已经知道safari ios的下载,尽管我看到一些下载会提示用户打开另一个应用程序继续。)

所以我试过使用Download链接,但当点击它时,它只是在一个新的选项卡中打开视频并播放它。

如果我尝试使用php脚本,它会在一个新的选项卡中打开视频,并显示一个划掉的播放按钮(视频甚至不能播放)。我几天来一直在寻找答案,我编辑了.htaccess文件,测试了不同的脚本、内容类型、头等。

这就是当前的脚本在特定于移动的情况下的样子-

... first few lines same as above script ...

file_put_contents($save, fopen($nameOld, 'r'));

//echo file_get_contents($save);
//$headers = get_headers($nameOld, 1);
//$filesize = $headers['Content-Length'];
//set_time_limit(0);

ob_clean();

//if(ini_get('zlib.output_compression'))
               // ini_set('zlib.output_compression', 'Off');
            //$fp = @fopen($save, 'rb');

//header('Connection: Keep-Alive');
//header('Content-Description: File Transfer');
//header('Content-Type: application/force-download');
//header('Content-Type: application/octet-stream');
header('Content-Type: video/mp4');
//header("Content-Disposition: attachment; filename=$nameNew");    
header("Content-disposition: attachment; filename=\"" . basename($save) . "\"");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
//header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($save));
//ob_end_clean();

     while (ob_get_level()) {
        ob_end_clean();
      }

//fpassthru($fp);
  //          fclose($fp);

readfile($save);
//exit;

unlink($save);    
die();

我还试着在手机上打印其中一个文件的头-

print_r(get_headers($url));
print_r(get_headers($url, 1));

今天的输出如下所示,但昨天的content-type表示application/octet-stream---

Array ( [0] => HTTP/1.1 200 OK [1] => Date: Wed, 27 Feb 2019 14:51:56 GMT [2] => Server: Apache/2.4.29 (Ubuntu) [3] => Last-Modified: Tue, 26 Feb 2019 14:16:19 GMT [4] => ETag: "3e7e3a-582ccb37e75a7" [5] => Accept-Ranges: bytes [6] => Content-Length: 4095546 [7] => Connection: close [8] => Content-Type: video/mp4 ) Array ( [0] => HTTP/1.1 200 OK [Date] => Wed, 27 Feb 2019 14:51:56 GMT [Server] => Apache/2.4.29 (Ubuntu) [Last-Modified] => Tue, 26 Feb 2019 14:16:19 GMT [ETag] => "3e7e3a-582ccb37e75a7" [Accept-Ranges] => bytes [Content-Length] => 4095546 [Connection] => close [Content-Type] => video/mp4 )

我也检查了我的php信息设置,没有看到任何可能导致问题的东西,但我也不太确定该查找什么。

我知道在chrome mobile上下载文件是可能的,因为其他网站对我有用,只是不是我自己的。

我做错了什么?


共有2个答案

何高歌
2023-03-14

您确定使用的格式是:

<a href="myvideo.mp4" download>Download</a>

正如miken32所提到的:

“您正在将MIME类型设置为video/MP4。如果浏览器可以播放此类视频,则会播放此类视频。请将其更改为Application/Octet-Stream。

编辑:您也可以尝试在.htaccess文件中设置此内容:

AddType application/octet-stream .mp4

然后将其更改为application/octet-stream.

试试这个。

鲜于裕
2023-03-14

将其添加为标题:“x-content-type-options:nosniff”;这样做是为了防止浏览器自己解释接收到的内容。在关联中使用内容-处置:附件;...浏览器应提供下载。

 类似资料:
  • Android SDK 要求 Min Sdk Version - 使用 Glide 需要 min SDK 版本 API 14 (Ice Cream Sandwich) 或更高。 Compile Sdk Version - Glide 必须使用 API 27 (Oreo MR1) 或更高版本的 SDK 来编译。 Support Library Version - Glide 使用的支持库版本为 27

  • 查找有关移动设备上的 Adobe XD 的常见问题解答。了解支持的设备和平台以及如何下载和使用移动设备上的 Adobe XD。 利用 Adobe XD 移动应用程序,您可以在 iOS 和 Android 设备上预览设计。 在桌面上使用 XD 编辑设计,并查看它们在通过 USB 连接的移动设备上反映的实时效果。 您可以在 XD 中将 XD 文档另存为云文档(一种新的原生文件类型,可在 XD 应用程序

  • 查找有关移动设备上的 Adobe XD 的常见问题解答。了解支持的设备和平台以及如何下载和使用移动设备上的 Adobe XD。 利用 Adobe XD 移动应用程序,您可以在 iOS 和 Android 设备上预览设计。 在桌面上使用 XD 编辑设计,并查看它们在通过 USB 连接的移动设备上反映的实时效果。 您可以在 XD 中将 XD 文档另存为云文档(一种新的原生文件类型,可在 XD 应用程序

  • 下载工具 请从官网下载最新版本。工具分为简体中文和繁体中文版,请根据说明选择合适的分流。 开发环境 请确认自己的电脑基本符合以下条件。如显示器分辨率不足,可使用小分辨率版本Editor_lite.exe,或者使用滚动条/切换到全屏。 显示器分辨率:1400x900以上(推荐) 色彩:65536色 (TrueColor, 16bit)以上 操作系统:Windows 2000/XP/Vista/7 D

  • 问题内容: 设置INTERNET_ACCESS等后,出现此错误。 这是我测试过的代码的另一部分,仍然收到该异常 } 问题答案: “ftp.194.90.81.149”: No address associated with hostname 您收到UnknownHostException的事实意味着ftp.194.90.81.149在DNS中不是真实的主机名。我怀疑其中的数字部分是您真正想要的。即

  • 我正在开发这个响应性强的Wordpress网站:http://www.allisoncassels.com/Test/ 还有我的媒体查询有问题。 我为以下断点编写了CSS: 在桌面上,一切看起来都很棒。在我的手机和平板电脑上,有些东西是移动的,有些东西仍然像桌面一样显示(我显示的东西:无显示,分区宽度关闭,等等) 我唯一能弄明白的是,这与我的手机/平板电脑是视网膜显示器有关,但我看不到其他网站必须