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