PHP 到 Coldfusion zip/pkpass 输出流

PHP to Coldfusion zip/pkpass output stream

这个项目是我的苹果钱包项目,但是在 PHP 代码中,我面临挑战,我的 PHP 问题没有太多帮助,目前还没有回复,无论如何,现在我决定转换成冷聚变。

我能够在 BLOB 中以二进制形式保存 ZIP/PKPASS 文件。当我发送 PHP API GET 请求获取卡(二进制 zip/pkpass)时,它返回给我二进制流,请参见下面的附加屏幕。

当我向 coldfusion 发送请求时,我希望在 coldfusion 中实现相同的结果 API 代码也附在下面。

邮递员:

火狐:

我正在尝试在 coldfusion(lucee) 中转换 PHP 代码。数据库中的二进制代码是 zip 文件,但扩展名为“.pkpass”,数据库字段名称为 "data".

当我输入 运行 冷聚变代码时,它给出了错误 "Corrupted Content Error"。

PHP代码:

 $myPass = $result->fetch();

        $data = $myPass['data']; //zip/pkpass file Binary code from DB
        $nameFile = 'passbook_'.time().'.pkpass';
        file_put_contents($nameFile, $data);

        $stream = function () use ($nameFile) {
            readfile($nameFile);
        };

        return $app->stream($stream, 200, array(

            'Pragma' =>  'no-cache',
            'Cache-Control' => 'private,false',
            'Content-Transfer-Encoding' =>  'binary',
            'Content-Disposition' => 'inline; filename="'.basename($nameFile).'"',
            'Content-Type' => 'application/vnd.apple.pkpass',
            'Content-length' => filesize($nameFile),
            'Content-Disposition' => 'attachment; filename="'.$nameFile.'"',
            'Last-Modified' => gmdate('D, d M Y H:i:s T')
        ));

Coldfusion 代码:不工作需要帮助

   <cfset filename = getPass.serial_number&'_'&createUUID()&'.pkpass'>  
            <cfheader name="Pragma" value="no-cache">
            <cfheader name="Cache-Control" value="private,false">
            <cfheader name="Content-Transfer-Encoding" value="binary">
            <cfheader name="Content-Disposition" value="inline; filename=#filename#">
            <cfheader name="Content-Type" value="'application/vnd.apple.pkpass">
            <cfheader name="Content-Disposition" value="attachment; filename=#filename#">
            <cfheader name="Content-Disposition" value="#DateFormat(getPass.updated_at, "yyyy-mm-dd")#' '#TimeFormat(getPass.updated_at, 'hh:mm:ss')#">
<cfcontent type="application/x-zip-compressed" variable="#BinaryDecode(getPass.data, 'Base64')#"> <!--- Binary Data from db 'getPass.data' --->

主要问题似乎是您将最后修改的值放在 "Content-Disposition" header 中。尝试修复它并清理其他 headers,如下所示:

<cfscript>
filename = "#getPass.serial_number#_#CreateUUID()#.pkpass";
cfheader( name="Pragma", value="no-cache" );
cfheader( name="Cache-Control", value="private,false" );
cfheader( name="Last-Modified", value="#DateFormat( getPass.updated_at, 'yyyy-mm-dd' )# #TimeFormat( getPass.updated_at, 'hh:mm:ss' )#" );
cfheader( name="Content-Transfer-Encoding", value="binary" );
cfheader( name="Content-Disposition", value="attachment; filename=#filename#" );
cfcontent( variable="#getPass.data#", type="application/vnd.apple.pkpass" );
</cfscript>