我已经开发了一个应用程序,但是当我的客户尝试从使用三星 GT19003 提供的 url 下载应用程序时,它正在以 .zip 文件的形式下载,点击它说无法打开文件错误。而它以 .apk 的形式下载并且在我们的设备上运行良好。请帮助我,我该如何解决这个问题。
5 回答
一个简单的解决方案是在 /etc/mime.types 中添加以下行
application/vnd.android.package-archive apk
并重新启动你的 apache。
这将强制浏览器将文件下载为“apk”,而不是附加“zip”。
确保您已将 http 设置Content-Type
为application/vnd.android.package-archive
这让 chrome 知道它是一个应用程序而不是一个 zip。
如果它被下载为 .zip
您或您的客户可以使用File Expert
application
解压缩此 . zip文件,它必须在解压缩文件夹中显示 .apk 文件为您的用户提供直接 apk 链接,他/她使用默认浏览器下载或使用其他类似 Opera 的链接,如果是 .apk 文件链接,则必须按原样下载。
- 您可能正在使用某些内容站点,该站点以特定的下载方法压缩文件,请确保它用于直接 .apk 链接。
编辑1:
- 最后但并非最不重要的一点是 .apk 只是一个 zip 文件,所以这不是问题,如果可以的话,只需重命名它(从 .Zip 到 .apk) ,我希望它能解决问题
在我的情况下,这个问题也与@alireza-fattahi 提到的关于标题的问题相同。
在这里分享这个是因为在我们的例子中,该文件位于Azure 存储中并由CDN访问,以防万一有人遇到同样的问题。
修复 Azure Sorage 和 CDN
默认情况下,上传的 APK blob 的内容类型为 ,application/zip
并且与 reposnse 标头中反映的内容类型相同,导致下载的文件.zip
在下载完成后在 Android OS 上获得扩展名。
我必须在存储 CDN 中设置自定义规则以覆盖content-type
响应头application/vnd.android.package-archive
设置新规则后记得清除 CDN 缓存
阅读有关Azure CDN 规则引擎的更多信息。
这是示例://在此处设置您的下载apk路径
$path= public_path()。"/upload/apk/Ninja11.apk";
//Set header here like this
$headers = [
'Content-Type'=>'application/vnd.android.package-archive',
'Content-Disposition'=> 'attachment; filename="ninja-release.apk"',
];
返回响应()->文件($path,$headers);
这是 Laravel 框架代码,但同样可以在其他框架中使用。只需设置内容类型
注意:这不是 Android 方面的问题