这个SO 答案适用于我,但我不知道如何“将内容类型更改为 application/vnd.apple.pkpass”
目前,指向我的 pkpass 的直接链接会触发下载,我不知道在哪里设置内容类型。
我已要求我的托管服务提供商确认“application/vnd.apple.pkpass”是受支持的 MIME 类型
我试过了
当从 iOS 6 或 Mac OS 10.8 单击链接时,我该怎么做才能使文件被识别为“application/vnd.apple.pkpass”?
这个SO 答案适用于我,但我不知道如何“将内容类型更改为 application/vnd.apple.pkpass”
目前,指向我的 pkpass 的直接链接会触发下载,我不知道在哪里设置内容类型。
我已要求我的托管服务提供商确认“application/vnd.apple.pkpass”是受支持的 MIME 类型
我试过了
当从 iOS 6 或 Mac OS 10.8 单击链接时,我该怎么做才能使文件被识别为“application/vnd.apple.pkpass”?
您需要更改 Web 服务器的配置才能执行此操作。如何执行此操作取决于您使用的 Web 服务器。如果您有一家托管公司为您管理您网站的服务器,您可能需要请他们这样做或告诉您在哪里可以。
许多托管公司使用 Apache 作为 Web 服务器。如果是这样,您可以在公共 HTML 目录中创建一个 .htaccess 文件,并将其放入其中:
AddType application/vnd.apple.pkpass .pkpass
这将使以“.pkpass”结尾的任何文件都以该内容类型下载。
这假设您让客户端下载一个静态文件。如果你动态生成这个文件,你根本不需要弄乱服务器,只需要发送一个标题。这取决于您使用的脚本语言,例如在 PHP 中您会这样做:
header("Content-Type: application/vnd.apple.pkpass");
如果您正在动态生成通行证,您可能会发现以下内容有助于确保每次下载新的 .pkpass,并按照 Apple 的建议使用最后修改的标头提供文件。
用 PHP 编写,但很容易移植到其他语言。
// Assumes a .pkpass bundle named pass.pkpass in the same directory.
//Prevent caching
header("Pragma: no-cache");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
// Set MIME type, encoding and force download
header("Content-type: application/vnd.apple.pkpass; charset=UTF-8");
header('Content-Transfer-Encoding: binary');
header('Content-Disposition:attachment; filename="pass.pkpass"');
// Provide a content-length header based on the file size
$filesize = filesize('pass.pkpass');
if ($filesize)
header("Content-Length: ". $filesize);
// Set a last-modified header (used by the device in update requests)
date_default_timezone_set("UTC");
header('Last-Modified: ' . date("D, d M Y H:i:s", time())) . ' GMT');
// Clear anything that may be in the output buffer and send the bundle contents
flush();
readfile('pass.pkpass');
// Do any clean up required
exit();