2012-07-31 5 views
3

바이너리 데이터 (예 : PDF)를 내 Oracle 데이터베이스의 BLOB에 넣고 싶습니다. 는 처음에는 FileInputStream 객체로 PDF를 퍼트와 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를 읽을 수도있었습니다. 하지만 이제 다음과 같은 문제가 발생합니다. 특정 데이터베이스에 연결하여 모든 콘텐츠를 xml 파일에 저장하는 검색 엔진 (빠른 ESP ...하지만 그 dowsnt 문제) 용 JDBC 커넥터가 있습니다. 이 xml 파일 안에는 CDATA 필드 안에 이진 데이터가 들어있는 "data"라는 요소가 있습니다. 나는이 XML을 구문 분석 할 때

는, 자바는 저에게 말한다 :

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

일부 PDF의 전 작품으로하지만, 일부하지에. 문제는 데이터베이스에 잘못된 방식으로 저장했기 때문입니다.

자세한 내용은 이전에 내가 물어 본 또 다른 질문에 대한 경외심이 있습니다.

Java: skip binary data in xml file while parsing

누군가가 내가 base64로 내 PDF (또는 바이너리 파일)을 인코딩해야한다고 내게 말했다. 즉, PDF를 FileInputStream에 저장하고 [] 바이트를 저장 한 다음이 바이트 []를 데이터베이스의 BLOB에 넣는 것이 아닙니다. 내 데이터베이스에서 올바른 방법으로 PDF를 저장하기 위해해야 ​​할 일이 있습니다. 그러면 나중에 JDBC 커넥터가 만드는 XML 파일을 올바르게 구문 분석 할 수 있습니까?

답변

0
먼저이 예를 들어 아파치 코 몬즈를 사용 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는 BLOB에 먼저 저장 한 PDF 파일의 바이너리 내용을 나타내는 내 바이트 []이다. 이제 base64String (byte [] 임)으로 변환하여 이것을 BLOB 안에 저장했습니다. 이것은 또한 작동하지만 지금은 데이터베이스 내에서 파일을 열 수 없습니다. 이 올바른지? 좋아, 다시 해독해야한다고 생각하지만, 데이터베이스 내부에는 JDBC 커넥터를 통해 검색 엔진에 전송되는 실제 파일이 있어야하기 때문에이 작업을 수행 할 수 없습니다. 그래서 나는 이것을 직접 사용할 수 없다. 다른 방법이 있습니까? – Metalhead89

2

쉽게 외부 의존성없이 64 기수로 데이터를 변환하기 위해 JAXB DatatypeConverter 클래스를 사용할 수 있습니다 :

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

이 코드를 메서드 끝에 추가하고 반환 유형을 String으로 변경할 수 있습니다.

+0

nice..very helpful –

관련 문제