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