从MySQL流二进制文件用PHP下载 [英] Stream binary file from MySQL to download with PHP
本文介绍了从MySQL流二进制文件用PHP下载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我存储在MySQL表LONGBLOB领域的Excel US preadsheets。我需要检索这些数据,然后将其传输到用户作为一个可下载的文件,preferably没有首先将其写入到磁盘中。
可能?
编辑 - 嗯,只是理解了它...张贴在下面的答案
。解决方案
函数GETFILE($ BLOCKID)
{
全球$ msa_db;
$的SQL =选择文件名,从块,其中BLOCKID ='$ BLOCKIDFILEDATA
$查询=的mysql_query($的SQL,$ msa_db);
$结果['名'] = mysql_result($查询,0,0);
$结果['FILEDATA'] = mysql_result($查询,0,1);
返回$结果;}功能下载($的FileInfo)
{
$文件= base64_de code($的FileInfo ['FILEDATA']);
标题(缓存控制:无缓存私人);
标题(内容说明:文件传输);
标题(内容处置:附件;文件名='$的FileInfo ['名']);
标题(内容类型:应用程序/ vnd.ms - Excel中);
标题(内容传输编码:二进制);
标题(内容长度:strlen的($文件));
回声$文件;
\t出口;
}$ FileInfo的= GETFILE($ BLOCKID);下载($ FileInfo的);
I have Excel spreadsheets stored in a MySQL table longblob field. I need to retrieve this data and then stream it to the user as a downloadable file, preferably without writing it to disk first.
Possible?
Edit - Eh, just figured it out... Posted in answer below.
解决方案
function getfile($blockid)
{
global $msa_db;
$sql = "select filename, filedata from blocks where blockid = '$blockid'";
$query = mysql_query($sql, $msa_db);
$result['filename'] = mysql_result($query,0,0);
$result['filedata'] = mysql_result($query,0,1);
return $result;
}
function download($fileinfo)
{
$file = base64_decode($fileinfo['filedata']);
header("Cache-Control: no-cache private");
header("Content-Description: File Transfer");
header('Content-disposition: attachment; filename='.$fileinfo['filename']);
header("Content-Type: application/vnd.ms-excel");
header("Content-Transfer-Encoding: binary");
header('Content-Length: '. strlen($file));
echo $file;
exit;
}
$fileinfo = getfile($blockid);
download($fileinfo);
这篇关于从MySQL流二进制文件用PHP下载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文