views:

314

answers:

1

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.

+1  A: 
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);
Ian
Thanks for sharing. This might be useful one day :o)
Cassy