2009-12-22 135 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++; 
} 
相关问题