MarkLogic 앱 개발 자습서: 이진 파일 읽기/쓰기

9750 단어 MarkLogicnosql
NoSQL 제품인 MarkLogic의 튜토리얼 제3회입니다.

바이너리 파일을 읽고 쓰는 샘플을 만들어 보겠습니다.

다음 단계를 이미 완료했다고 가정합니다.
  • MarkLogic 사용자 만들기
  • Java 프로젝트 작성
  • Java API 라이브러리 다운로드

  • 준비



    프로젝트의 루트 디렉토리에 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에 만들어져 있어야 합니다.

    좋은 웹페이지 즐겨찾기