我想将二进制数据(例如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