我正在尝试从使用PHP的服务器下载二进制文件。 下载时,它会以某种方式在文件的开头随机添加一个字节:
结果下载(十六进制编辑器图像):
预期结果下载(十六进制编辑器图像):
我尝试过的事情:
1.标头方式尝试1
$filename = 'spss-export.sav';
header("Content-Disposition: attachment; filename=survey_2_SPSS_syntax_file.sav");
header("Content-type: application/download; charset=UTF-8");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: public");
readfile($filename); // do the double-download-dance (dirty but worky)
exit;
2。标头方式尝试2
$filename = 'spss-export.sav';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($filename) . "\"");
readfile($filename); // do the double-download-dance (dirty but worky)
exit;
3。 Laravel响应下载
$filename = 'spss-export.sav';
return response()->download($filename);
标头方式产生的文件在开始时只具有随机字节,而laravel方式产生的是随机字节,而文件末尾则缺少一个字节。有人知道可能是什么问题吗?
答案 0 :(得分:0)
我自己找到了一个答案: 您必须在文件输出之前添加 ob_end_clean()。 laravel框架以某种方式为文件增加了额外的空间。
如果这不起作用,请参考:
https://drupal.stackexchange.com/questions/163628/extra-space-at-beginning-of-downloaded-image/163644#163644