从MySQL流二进制文件用PHP下载 [英] Stream binary file from MySQL to download with PHP

查看:342
本文介绍了从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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆