Convertig excel base64到可下载文件PHP

时间:2017-11-08 20:07:11

标签: php excel file base64

每个人,我现在正在运行某些问题,查看我无法控制的服务器的内部情况或现在任何事情我不能直接在网站上使用base64编码文件导致当服务器向浏览器提供内容时它有一个这些任务的字符限制,它直接影响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无法打开文件,有没有人知道我在这里失踪了什么? :)

1 个答案:

答案 0 :(得分:1)

我很确定,它正在发生,因为你没有退出你的功能而且它继续填充缓冲区。您必须在流准备就绪后立即停止脚本,清理缓冲区并退出。

如果是有效的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();