2012-07-31 572 views
3

我想將二進制數據(例如PDF)轉換爲Oracle數據庫的BLOB。 起初我的推杆的PDF到一個FileInputStream和創建的byte-array.Here是用於該代碼:將PDF轉換爲Base64並將數據存儲到數據庫的BLOB

public static byte[] createByteArray(File pCurrentFolder, String pNameOfBinaryFile) 
    { 

     String pathToBinaryData = pCurrentFolder.getAbsolutePath()+"/"+pNameOfBinaryFile; 

     File file = new File(pathToBinaryData); 
     if (!file.exists()) 
     { 
      System.out.println(pNameOfBinaryFile+" could not be found in folder "+pCurrentFolder.getName()); 
      return null; 
     } 

     FileInputStream fin = null; 
     try { 
      fin = new FileInputStream(file); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 

     byte fileContent[] = new byte[(int) file.length()]; 

     try { 
      fin.read(fileContent); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     return fileContent; 
    } 

我發送這個(字節數組)通過的MyBatis到數據庫和它的工作,從而使我在我的BLOB中有PDF,我也可以從我的數據庫中讀取PDF。 但現在我面臨以下問題: 我有一個JDBC連接器用於我的搜索引擎(FAST ESP ......但這很重要),它連接到某個數據庫並將所有內容存儲到一個xml文件中。在這個xml文件裏面有一個名爲「data」的元素,它在CDATA字段中包含二進制數據。

當我要分析此XML,Java的告訴我:

The content of elements must consist of well-formed character data or markup. 

對於某些PDF的我的作品,但有些不是。所以我認爲問題在於,我將它們以錯誤的方式存儲在數據庫中。

欲瞭解更多信息,我會尊敬我之前問過的其他問題,這與之類似。

Java: skip binary data in xml file while parsing

有人在告訴我,我應該編碼我的PDF(或任何二進制文件)使用Base64。所以這意味着,我不只是把我的PDF到一個FileInputStream,存儲字節[],並把這個字節[]到我的BLOB的數據庫。 我需要做什麼,以正確的方式在我的數據庫中存儲PDF,以便後來我可以正確解析JDBC連接器創建的XML文件?

回答

0

你可以嘗試先字節轉換爲使用Apache下議院作爲這個例子basse64:

import org.apache.commons.codec.binary.Base64; 

import java.util.Arrays; 

public class Base64Encode { 
    public static void main(String[] args) { 
     String hello = "Hello World"; 


     byte[] encoded = Base64.encodeBase64(hello.getBytes()); 


     System.out.println(Arrays.toString(encoded)); 

     String encodedString = new String(encoded); 
     System.out.println(hello + " = " + encodedString); 
    } 
} 
+0

我試過這個: 'byte [] base64String = Base64.encodeBase64URLSafe(fileContent);' fileContent是my byte [],代表我首先存儲在BLOB中的PDF文件的二進制內容。現在我將它轉換爲base64String(也是一個byte [])並將其存儲在我的BLOB中。這也工作,但現在我無法打開我的數據庫內的文件。它是否正確?好吧,我想我應該再次解碼它,但我不能這樣做,因爲在數據庫中必須有真正的文件,然後通過JDBC連接器發送到搜索引擎。所以我不能直接使用它。有另一種方法嗎? – Metalhead89 2012-08-01 06:40:53

2

您可以使用JAXB DatatypeConverter類輕鬆地將數據轉換爲Base64,無需任何外部的依賴關係:

byte[] arr = YOUR_BINARY_ARRAY; 
String result = javax.xml.bind.DatatypeConverter.printBase64Binary(arr); 

您可以簡單地將此代碼添加到方法的末尾,並將其返回類型更改爲字符串。

+0

很好..很有幫助 – 2017-11-21 11:16:56

相關問題