2

这个SO 答案适用于我,但我不知道如何“将内容类型更改为 application/vnd.apple.pkpass”

目前,指向我的 pkpass 的直接链接会触发下载,我不知道在哪里设置内容类型。

我已要求我的托管服务提供商确认“application/vnd.apple.pkpass”是受支持的 MIME 类型

我试过了

当从 iOS 6 或 Mac OS 10.8 单击链接时,我该怎么做才能使文件被识别为“application/vnd.apple.pkpass”?

4

2 回答 2

4

您需要更改 Web 服务器的配置才能执行此操作。如何执行此操作取决于您使用的 Web 服务器。如果您有一家托管公司为您管理您网站的服务器,您可能需要请他们这样做或告诉您在哪里可以。

许多托管公司使用 Apache 作为 Web 服务器。如果是这样,您可以在公共 HTML 目录中创建一个 .htaccess 文件,并将其放入其中:

AddType application/vnd.apple.pkpass .pkpass

这将使以“.pkpass”结尾的任何文件都以该内容类型下载。

这假设您让客户端下载一个静态文件。如果你动态生成这个文件,你根本不需要弄乱服务器,只需要发送一个标题。这取决于您使用的脚本语言,例如在 PHP 中您会这样做:

header("Content-Type: application/vnd.apple.pkpass");
于 2012-12-12T19:11:25.817 回答
3

如果您正在动态生成通行证,您可能会发现以下内容有助于确保每次下载新的 .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();
于 2013-01-08T17:08:09.153 回答