[英]Unload images from MySQL to disk
我將圖像作為Blob存儲在MySQL中( 我知道這是錯誤的 )。 而且有很多。 是否有任何快速的方法可以將它們全部拖放到磁盤上,例如SELECT .. INTO OUTFILE
,但可以放入許多由一個文件插入的文件中? 還是唯一的方法是編寫將遍歷行並保存圖像的腳本?
由於要將它們保存到磁盤上的其他文件中,因此必須使用腳本。
#!/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++;
}
我有一個類似的要求,在我的案例中,我發現使用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”來稱呼它)提取斑點(使用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()
;
...
如果您覺得它可能有用,那么我可以發布一個更完整的示例-但是我會從一個更大的項目中提取代碼,否則我會直接發布它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.