我正在拨打API(PHP服务器),我可以确认我收到了回复,我知道我得到回复的代码是:
$binaryF = $rsObject->makeCall('get', "/JobData/{$_GET["jID"]}", "?format=bin");
//header("Pragma: public"); // required
//header("Content-Type: application/zip");
//header("Content-Disposition: attachment; filename=ss.zip");
//header("Content-Length: " . filesize($binaryF.length));
//header("Content-Transfer-Encoding: binary");
file_put_contents('C:\ss.zip', $binaryF);
如果我按原样保留代码并单击链接,该链接将我带到包含此代码的页面,则会创建ss.zip并打开它并确认其内容正确。数据来自第一行的API调用,基本上是一个zip包。如果我删除注释并注释掉file_put_contents行,那么浏览器会打开一个文件保存对话框,但是如果我保存它,那么存档是0字节?
从api调用中检索内容后,如何将内容发送到浏览器?我不想先将它保存到磁盘,我想将其发送到直接发出请求的浏览器。
谢谢 千斤顶
确定。我改成了:
header("Pragma: public"); // required
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=ss.zip");
header("Content-Length: " . strlen($binaryF));
header("Content-Transfer-Encoding: binary");
现在它打开文件保存。我保存它是8 K但是当我尝试打开它时,我收到一条消息:“Windows无法打开文件夹”它抱怨拉链无效?至少我到了某个地方,感谢到目前为止的帮助!
答案 0 :(得分:0)
尝试(未经测试):
header('Content-type: application/octet-stream');
header('Content-disposition: attachment; filename=ss.zip');
echo $binaryF;
答案 1 :(得分:0)
$binaryF
需要是您尝试提供的文件的文件路径的字符串值才能使filesize()
正常工作。
您可以使用strlen()
获取要在ContentLength标头中使用的文件大小。
您当然仍需要将文件实际输出到客户端浏览器。
答案 2 :(得分:0)
我在使用PDF方面遇到了类似问题,但Content-Length
无法使用strlen()
正确计算multibyte-characters
,因为它不支持header("Content-Length: " . mb_strlen($binaryF));
。
而不是试试这个:
{{1}}
有关详细信息,请参阅文档:http://www.php.net/manual/en/function.mb-strlen.php
答案 3 :(得分:0)
好的,@zerkms帮我指出我应该使用:strlen($ binaryF)而不是filesize($ binaryF.length)他通过告诉我打开zip存档帮助我进行聊天会话(简单的事情)像记事本一样,我用file_put_contents('C:\ ss.zip',$ binaryF)得到了;这表明所产生的内容只是部分正确,有一些HTML内容滑入了实际调用的响应中。所以所有的功劳归功于@zerkms,谢谢。
什么有用?以下对我有用:
header("Pragma: public"); // required
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=ss.zip");
header("Content-Length: " . filesize($binaryF.length));
header("Content-Transfer-Encoding: binary");
echo $binaryF