2012-07-31 129 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

相关问题