我需要将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
(好吧,我认为)
(现在是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阅读器中打开。我的猜测是输错了,但也许这就是我保存它的方式?
答案 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));
另外,为什么要首先转换数据,只需将其保存为二进制文件。