MarkLogic 앱 개발 자습서: 이진 파일 읽기/쓰기
바이너리 파일을 읽고 쓰는 샘플을 만들어 보겠습니다.
다음 단계를 이미 완료했다고 가정합니다.
준비
프로젝트의 루트 디렉토리에
my.png
라는 이름으로 바이너리 파일을 놓습니다.데이터베이스에 쓰는 클래스 만들기
WriteBinaryData.java
public static void main(String[] args) {
// データベースクライアントの取得
DatabaseClient client = DatabaseClientFactory.newClient(
"localhost", 8000, "aaa", "pass", DatabaseClientFactory.Authentication.DIGEST
);
// DocumentManagerの取得
BinaryDocumentManager biMgr = client.newBinaryDocumentManager();
// データベースにメタデータも書き込まれるように指定
// (指定が無い場合、書き込まれない)
biMgr.setMetadataExtraction(BinaryDocumentManager.MetadataExtraction.PROPERTIES);
// バイナリデータを書き込み
biMgr.write(
"/example/my.png",
new FileHandle().with(new File("my.png")).withMimetype("image/png")
);
// クライアントの解放
client.release();
}
BinaryDocumentManager
를 사용합니다. FileHandle
를 사용하고 있습니다만, 이하의 Handle의 어느 것을 사용해도 좋다.FileHandle
BytesHandle
InputStreamHandle
OutputStreamHandle
URIHandle
실행
빌드하고 실행합니다.
19:47:01.551 [main] DEBUG c.m.client.DatabaseClientFactory - Creating new database client for server at localhost:8000
19:47:01.576 [main] DEBUG c.m.client.impl.JerseyServices - Connecting to localhost at 8000 as aaa
19:47:01.854 [main] INFO c.m.client.impl.DocumentManagerImpl - Writing content for /example/my.png
19:47:01.855 [main] DEBUG c.m.client.impl.JerseyServices - Sending /example/my.png document in transaction null
19:47:03.121 [main] INFO c.m.client.impl.DatabaseClientImpl - Releasing connection
19:47:03.121 [main] DEBUG c.m.client.impl.JerseyServices - Releasing connection
쿼리 콘솔에서 확인합니다. http://localhost:8000/qconsole/
링크를 클릭하면 업로드한 이미지가 표시됩니다.
데이터베이스에서 로드할 클래스 만들기
ReadBinaryData.java
public static void main(String[] args) {
// データベースクライアントの取得
DatabaseClient client = DatabaseClientFactory.newClient(
"localhost", 8000, "aaa", "pass", DatabaseClientFactory.Authentication.DIGEST
);
// DocumentManagerの取得
BinaryDocumentManager biMgr = client.newBinaryDocumentManager();
// ストリームに読み込む
InputStream is =
biMgr.read("/example/my.png", new InputStreamHandle()).get();
// ローカルファイルのストリームを開く
try (FileOutputStream fos = new FileOutputStream("/tmp/my.png")) {
// 読み込んだ内容を転記
ReadableByteChannel rbc = Channels.newChannel(is);
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
} catch (IOException e) {
// エラーが発生したら中断
throw new RuntimeException(e);
} finally {
// クライアントの解放
client.release();
}
}
BinaryDocumentManager
를 사용합니다. InputStreamHandle
를 사용하고 있습니다만, 기입의 경우와 같이, 다른 것도 사용할 수 있습니다. 실행
빌드하고 실행합니다.
19:50:15.740 [main] DEBUG c.m.client.DatabaseClientFactory - Creating new database client for server at localhost:8000
19:50:15.761 [main] DEBUG c.m.client.impl.JerseyServices - Connecting to localhost at 8000 as aaa
19:50:16.065 [main] INFO c.m.client.impl.DocumentManagerImpl - Reading metadata and content for /example/my.png
19:50:16.066 [main] DEBUG c.m.client.impl.JerseyServices - Getting /example/my.png in transaction null
19:50:16.642 [main] INFO c.m.client.impl.DatabaseClientImpl - Releasing connection
19:50:16.642 [main] DEBUG c.m.client.impl.JerseyServices - Releasing connection
이전에 데이터베이스에 업로드한 파일과 동일한 내용의 파일이
/tmp/my.png
에 만들어져 있어야 합니다.
Reference
이 문제에 관하여(MarkLogic 앱 개발 자습서: 이진 파일 읽기/쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/makopo/items/0239a0b92e4a4824c445텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)