Получить PDF-файл с SQL Server - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь восстановить некоторые файлы данных (в основном PDF-файлы) из базы SQL Server.

Image column type

Столбец таблицы имеет следующий тип: D_BLOB (изображение) и содержит данные этого типа: enter image description here

Что касается кода и различных подходов, которые я пробовал, здесь мои различные части кода объединены

byte[] output = qResult.getBytes("DOCUMENT");
Blob blob = qResult.getBlob("DOCUMENT");
String document2 = qResult.getString("DOCUMENT");

InputStream input = qResult.getBinaryStream("DOCUMENT");
FileOutputStream output2 = new FileOutputStream(new File(repertoireDst +     "\\" + intitule + "_test2_." + extension));
byte[] buffer = new byte[1024];
            while (input.read(buffer) > 0) {
            output2.write(buffer);
            }
output2.close();

/************************************
 * Simple input output Stream
 *******************/
InputStream inputStream = blob.getBinaryStream();
OutputStream outputStream = new FileOutputStream(repertoireDst + "\\" + intitule + "_test_." + extension);

int bytesRead = -1;
byte[] buffer2 = new byte[1024];
while ((bytesRead = inputStream.read(buffer2)) != -1) {
outputStream.write(buffer2, 0, bytesRead);
}

inputStream.close();
outputStream.close();

/************************************
 * Simple byte writing
 *******************/
FileOutputStream fos = null;

fos = new FileOutputStream(new File(repertoireDst + "\\" + intitule + "_V1_EcritureBytesSymple." + extension));
fos.write(output);
fos.flush();
fos.close();

/*************************************************
 * Ecriture of bynary stream from blob
 ***********************************************/
InputStream is = blob.getBinaryStream();
FileOutputStream fos1 = new FileOutputStream(repertoireDst + "\\" + intitule + "_V2_BlobEcritDirectement.txt");

int b = 0;
while ((b = is.read()) != -1) {
fos1.write(b);
}
fos1.flush();
fos1.close();
/**************************************************************************
 * Testing for base 64 encoding
 ************************************************************************/

File fichierDestinationTemp = new File(repertoireDst + "\\" + intitule + "_V3_FichierTxtTemp.txt");
File fichierDestinationTemp2 = new File(repertoireDst + "\\" + intitule + "_V4_FichierEncoderDecoder.txt");
File fichierDestinationTemp3 = new File(repertoireDst + "\\" + intitule + "_V5_FichierEncoder." + extension);

Файл fichierDestination = новый файл (repertoireDst + "\" + intitule + "." + Расширение);

PrintWriter writer = new PrintWriter(fichierDestinationTemp, "Cp1252");
writer.print(document2);
writer.close();

byte[] encodedBytes = Base64.getEncoder().encode(output);
String encodedString = new String(encodedBytes);

FileOutputStream fos2 = new FileOutputStream(fichierDestinationTemp3);
fos2.write(encodedString.getBytes());
fos2.flush();
fos2.close();

byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
FileOutputStream fos3 = new FileOutputStream(fichierDestinationTemp2);
fos3.write(decodedBytes);
fos3.flush();
fos3.close();

Конечно, это создает все мои файлы, но ни один из файлов pdf не читается. Я думаю, я что-то пропустил. (И да, я знаю, что некоторые части я записываю в файлы .txt, но это было для того, чтобы увидеть, что я получу, и эй, некоторые из них, где даже в китайском ...)

text file in chinese

Любая идея приветствуется, интересно, чего мне не хватает.

1 Ответ

0 голосов
/ 14 января 2019

Я наконец узнал, какой тип данных был сохранен, 0x78 соответствует zlib 4.0. Это означает, что я смог накачать данные с помощью InflateOutputStream в Java. Тогда мне просто нужно было сохранить данные с расширением .pdf, после чего все было хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...