2009-12-22 192 views
1

我已經存儲在MySQL的圖像作爲斑點(我知道這是錯)。其中有很多。有沒有把它們的所有磁盤上,像SELECT .. INTO OUTFILE任何快捷方式,但許多文件insted的一個嗎?或者唯一的方法是編寫一個腳本來遍歷行並保存圖像?卸載映像磁盤

+0

出於興趣,爲什麼它錯了? [我一直避開使用斑點的圖像數據爲好,但我沒有一個很好的理由這樣做! (除了圖像數據比診斷/調試更隱藏的事實)。 – monojohnny

+0

它像糖蜜一樣慢。 –

回答

3

既然你希望它們保存到磁盤上的不同文件,你必須去一個腳本。

0

我有一個類似的需求,我發現在我的情況下使用Java + Hibernate(可能類似於其他Hibernate變體中的任務,但沒有嘗試過),讓我很快就到了那裏。

我設置了這樣的映射:

<hibernate-mapping> 
    <class name="<com.package.table>" table="table"> 
    <id column="pk" name="pk" type="int"> 
    </id> 
    <property name="blobfield" type="blob"/> 
    </class> 
</hibernate-mapping> 

一個Java Bean來承載數據,是這樣的:

package com.package; 
import java.sql.Blob; 
... 
public class table { 
... 
public Blob getBlobfield { 
... 

和循環是這樣的:

... 
tx = session.beginTransaction(); 
Criteria crit = session.createCriteria(table.class); 
crit.setMaxResults(50); // Alter this to suit... 
      List<table> rows = crit.list(); 
      for (table r: rows) { 
       ExtractBlob(r.getId(), r.getBlobField); 
} 

而且東西(「ExtractBlob」是我打電話這一點)來提取BLOB(使用PK來產生一個文件名),李的東西柯本:

...

FileOutputStream fout=new FileOutputStream(<...base output file on PK for example...> 
BufferedOutputStream bos=new BufferedOutputStream(fout); 
InputStream is=blob.getBinaryStream(); 
byte[] b=new byte[8192]; 
while ((is.read(b))>0) { 
     bos.write(b); 
} 
is.close(); 
bos.close() 

;

...

我可以發佈一個更完整的例子,如果你看起來像它可能是有用的 - 但我會提取從一個更大的項目的代碼,否則我會剛剛張貼直線上升。

+0

可悲的是,我不知道的Java。但我很確定我可以在PHP中做到這一點:) –

2
#!/usr/bin/perl 

#Note: it is my habit to name a Query Result $qR. 

use strict; 
use DBI; 
my $dbh = DBI->connect(YOUR_INFO_HERE); 

my $i = 0; 
my $q = $dbh->prepare('select image from images'); 
while (my $qR = $q->fetchrow_arrayref) { 
    open(FILE,'>',"$i.jpg"); 
    print FILE $qR[0]; 
    close FILE; 
    $i++; 
} 
相關問題