从SQL Server获取pdf文件

时间:2019-01-06 20:56:08

标签: java sql-server pdf blob

我正在尝试从SQL Server基础恢复一些数据文件(主要是pdf)。

Image column type

表列具有以下类型:D_BLOB(image)并包含此类数据: 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 :(得分:0)

我终于发现存储了什么类型的数据,0x78对应于zlib 4.0。这意味着我能够使用Java中的InflateOutputStream来膨胀数据。然后我只需要用.pdf扩展名保存数据,之后一切都很好。