0

这真的在发生。我在 PHP 中进行了测试以确认这一点。

我创建了一个 test.php 文件并输入:

<?php
    error_log('Downloading...');
    header('Content-type: application/force-download');
    header('Content-Disposition: attachment; filename="test.txt"');
    echo 'test android download';
?>

因此,当我通过任何 Android 移动浏览器打开 www.myurl/test.php 时,在 error_log.log 中我会得到两次“正在下载...”。

当我在任何其他移动操作系统(Windows、IOS 等)中打开相同的 URL 时,我只会在 error_log.log 文件中获得一次“正在下载...”。

有谁知道发生了什么以及如何避免这种情况?

这对我来说是个大问题,因为当有人下载​​文件时我会执行用户收费。现在从 Android 手机下载 1 个文件需要 2 次费用。

4

2 回答 2

1

我在死胡同:(

http://code.google.com/p/android/issues/detail?id=1978

浏览器需要点击服务器来确定某个东西是下载,然后下载管理器必须单独联系服务器进行下载。

因此,Android 启动第一个请求以打开“你确定吗? - 是/否”对话框。如果用户单击“是”Android 转发请求到 Android 下载管理器和管理器发送第二个请求以下载文件。(某些Android版本会立即向DownloadManager发送请求)

问题是第一个和第二个请求都是 GET 类型(不是 HEAD)。

于 2013-01-23T10:01:53.587 回答
0

就我而言,我收到两个请求。第一个抛出 org.apache.catalina.connector.ClientAbortException,描述为 java.net.SocketException: Connection reset by peer: socket

所以我只是捕捉到那个异常并写日志。我想你也可以这样做,只有在成功下载后才向客户收费

于 2013-03-20T10:20:35.437 回答