2015-01-27 3 views
0

У меня есть процедура pl/sql, которая возвращает Blob. Так я называю это:Как получить имя файла blob?

CallableStatement cstmt = null; 
Blob blob = null; 
cstmt = con.prepareCall("{? = call billing.PREQUEST.GetAttachment(?)}"); 
           cstmt.registerOutParameter(1, 
             OracleTypes.BLOB); 
cstmt.setInt(2, id); 
cstmt.execute(); 
blob = cstmt.getBlob(1); 

Теперь я хочу получить имя файла из blob. Как я могу это сделать?

+2

Какой файл был сохранен? Как правило, большинство файлов не имеют встроенного в них имени ... Обычно вы храните метаданные вместе с двоичными байтами (например, имя файла и т. Д.) В отдельных столбцах или таблицах. – Alex

ответ

0

Вам необходимо будет изменить Blob на File. Попробуйте этот код:

Blob blob = cstmt.getBlob(column); 
InputStream in = blob.getBinaryStream(); 
OutputStream out = new FileOutputStream("OutputFile"); 
byte[] buff = new byte[4096]; 
int length = 0; 

while ((length = in.read(buff)) != -1) { 
    out.write(buff, 0, length); 
} 

// From here, read in the File and just call "getName()" 
// Also, make sure to call to close out and in 
+1

Это не предоставит OP оригинальное имя файла, хранится как байтовый поток – Alex

+1

Я согласен с тем, что тип столбца «Файл» может помочь. Но я не вижу, что предоставленный код имеет отношение к вашему ответу. – Codo

+0

Я предоставлял способ создания файла, а затем просто получил название оттуда. Я не хотел предлагать все решение. – Ascalonian

1

BLOB колонка не хранит имя файла. Вам нужно добавить отдельный столбец типа VARCHAR2 для хранения исходного имени файла.

Если вы имеете дело с существующей базой данных, которая уже содержит много данных, то вам не повезло. Имя файла не было сохранено, и нет способа восстановить его.

Смежные вопросы