转换excel base64到可下载的文件PHP

大家,即时通讯运行在一些问题,现在看到的内部情况与服务器,我不能控制或任何东西现在我不能使用base64编码的文件直接通过网站,因为当服务器提供内容的浏览器,它有一个字符的限制对于这些任务,它直接影响这些string长度的base64编码文件的原因,所以我做了一个系统的PHP脚本,将已经存在的base64 pdf文件作为可下载的文件提交给客户端,它的工作原理是这样的:

$reg = File::find($args->string('id')); //querying the file from database $filename = $reg->filename; //the original file name $base64 = $reg->file; //the base64 encoded file $meta_type = explode(',', $base64) [0]; //getting the meta type of the file $meta_type = str_replace('data:', '', $meta_type); $meta_type = str_replace(';base64', '', $meta_type); $file = explode(',', $base64) [1]; $file = base64_decode($base64); //decoding the base64 string header('Content-Description: File Transfer'); header('Content-Type: ' . $meta_type); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . (strlen($file))); echo $file; 

这工作得很好,当我使用PDF文件,但当我尝试使用它的一些'xlsx'文件似乎工作,它下载文件,文件大小和所有似乎匹配的原始,但Excel不能打开文件任何人有一个想法,我在这里失踪? 🙂

我非常肯定,它的发生,因为你没有退出你的function,并继续填补缓冲区。 您的stream必须立即停止脚本,清理缓冲区并退出。

如果它是一个有效的Excel文件,所有你需要做的是:

 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Cache-Control: must-revalidate'); header('Expires: 0'); header('Pragma: public'); header('Content-Disposition: attachment; filename="' . $filename . '"'); if (ob_get_contents() || ob_get_length()) { ob_end_clean(); //or ob_end_flush(); } exit();