2014-12-08 5 views
1

Я пытаюсь сделать ETL для преобразования данных/обновления таблицы Oracle, содержащей файлы HUGEBLOB, а столбцы в этой таблице перечисляют только имя файла и тип MIME. Имена файлов не всегда (во многих случаях на самом деле) предоставляют расширение типа файла, а для тех, которые этого не делают, с типом MIME «application/octet-stream», я не могу легко определить что исходный тип файла был и перевести, он дает правильное расширение файла. Я понимаю, что «application/octet-stream» - это просто базовый тип двоичного файла. Тем не менее, многие из них, помеченные как таковые, фактически являются документами doc, текстовыми файлами, pdf-файлами и т. Д., Но просто не загружаются с их соответствующим типом MIME в базу данных по какой-либо причине (действительно плохо закодированная система!). Итак, я пытаюсь выяснить, есть ли где-то внутри двоичного кода файлов, которые я могу определить/извлечь фактический тип файла/расширение - и если да - как? Это расширение типа файла будет необходимо, когда оно будет загружено в SQL FileTable, иначе новая система не будет знать, какой тип файла он либо!Экспорт файлов из Oracle BLOB в SQL FileTable - типы файлов?

ответ

0

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

Лично я бы, наверное, начинал с чего-то вроде Apache Tika to do automated file recognition. Это связано с написанием некоторого кода Java как хранимой процедуры в базе данных или как автономной программы, находящейся за пределами базы данных. Если вам удобнее использовать какой-либо другой язык, вы можете найти аналогичный API для этого языка. Вы также можете использовать существующий standalone application to determine the file type, но это почти наверняка потребует сохранения файла из базы данных в операционную систему и, вероятно, будет сложнее интегрироваться с вашим инструментом ETL, чем с помощью специально созданного кода.

+0

Это выглядит ТОЧНО, что мне нужно, Джастин. Мне придется поиграть с ним и посмотреть, что я могу понять, но похоже, что это сработает. Огромное спасибо!! – kharvey