将pdf保存到BLOB(在mssql服务器中)并将其输出回网站(php)

时间:2015-11-10 13:06:36

标签: php sql-server pdf blob

我需要将pdf文件保存到BLOB中(数据库是MsSql 2012,但我也需要它在2008上工作)。

以下是我迄今为止所尝试的内容的汇编:

(档案where I save pdf into database

function preparePDF2String($filepath)
{
    $handle = @fopen($filepath, 'rb');
    if ($handle)
    {
        $content = @fread($handle, filesize($filepath));
        $content = bin2hex($content);
        @fclose($handle);
        return "0x".$content;
    }
}

$out = preparePDF2String('pdf/pdf.pdf');
$q_blob = "INSERT INTO HISTORIA_ARCHIWUM_test(PDFName, PDFData) VALUES('First test pdf', $out) ";

$r_blob = mssql_query($q_blob,$polacz);

Results(好吧,我认为)

enter image description here

(现在是php文件where I try to output the pdf

// header('Content-type: application/pdf');
// readfile('pdf/pdf.pdf'); - this works just fine, so pdf is ok


$q_blob = "select top 1 * from HISTORIA_ARCHIWUM_test";
$r_blob = mssql_query($q_blob,$polacz);
$w_blob = mssql_fetch_array($r_blob);

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');

echo $w_blob['PDFData'];
//echo hex2bin ($w_blob['PDFData']); - I also tried this - same problem

问题:当我尝试在浏览器中输出pdf时出现错误(此pdf是不支持的格式)。它也不会在Adobe阅读器中打开。我的猜测是输错了,但也许这就是我保存它的方式?

1 个答案:

答案 0 :(得分:2)

来自评论的编辑
 当你从db获取它时,似乎php + mssql会截断字符串,但它在php.ini中是可管理的。我设置了mssql.textlimit = 160000和mssql.textsize = 160000,它可以正常使用Hex转换和varchar(max)。

在将pdf数据保存到数据库之前,您正在转换它,您必须在输出之前撤消转换。

header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="the.pdf"');

echo hex2bin(substr($w_blob['PDFData'], 2));

另外,为什么要首先转换数据,只需将其保存为二进制文件。