2011-10-23 53 views
0

尝试将此Blob保存到文件并将其加载为图像时遇到很大麻烦。如何将BLOB保存为可读文件,如.txt或.jpg?

使用SQLite管理器(Firefox插件)我能够“另存为”一个文件与我的图像BLOB的内容。结果是一个奇怪的(对我来说)代码。

因为我不能发布“文件的来源”,所以我附上了一个png的例子。

example

在我的Mac,保存的文件没有extention,但我可以看到它产生的缩略图图像。

所以我想达到同样的结果保存一个文件,但我得到的是一个16个字节的文件,我不能读...

$pic = fopen('pics/thumbnails/pic_'.$id.'', 'w'); 
fwrite($pic, base64_encode($theFile)); 
fclose($pic); 

*编辑*

$theFile = shell_exec("sqlite3 AddressBookImages.sqlitedb 'select data from ABThumbnailImage where record_id = ".$id."'"); 
if($theFile != '') { 
    file_put_contents('pics/thumbnails/pic_'.$id.'.jpg', $theFile); 
} 
+0

'base64_encode'在这里是一个确定的错误。但是'$ theFile'是什么? – Jon

+0

哦,$ theFile是sqlite查询的结果$ theFile = $ row ['data']; – Pluda

+1

你应该试试'file_put_contents('pics/thumbnails/pic _'。$ id,$ theFile)'。如果这不起作用,那么涉及数据库的问题就会出错。 – Jon

回答

0

尝试使用(b代表二进制)

$pic = fopen('pics/thumbnails/pic_'.$id.'', 'wb'); 
+0

我的确用wb试过,也没有运气 – Pluda

0

我找到一个解决这一点,但它很慢,我发布了一个新问题,要求帮助改善这一点。

$sql2 = shell_exec("sqlite3 ".$endereco_iphone."".$db_pics." 'select hex(data) from ABThumbnailImage where record_id = ".$id."'"); 
// 
if($sql2 !='' && $sql2 != 'NULL') { 
    $img = ''; 
    foreach(explode("\n",trim(chunk_split($sql2,2))) as $h) { 
     $img .= chr(hexdec($h)); 
    } 
    if(file_put_contents('pics/thumbnails/pic_'.$id.'.jpg', $img)) { 
     $cnt .= "<img class='pics' src='pics/thumbnails/pic_".$id.".jpg' width='30px' height='30px'></img>"; 
    } 
} else { 
    $cnt .= "<div class='pics'></div>"; 
} 
相关问题