2

OpenLDAP サーバーから画像を保存しようとしています。バイナリ形式で、すべてのコードが機能しているように見えますが、画像が破損しています。

その後、PHP でこれを実行しようとして成功しましたが、Grails プロジェクトで実行したいと考えています。

PHP の例 (動作)

<?php
    $conn = ldap_connect('ldap.example.com') or die("Could not connect.\n");
    ldap_set_option($conn, LDAP_OPT_PROTOCOL_VERSION, 3);
    $dn = 'ou=People,o=Acme';
    $ldap_rs = ldap_bind($conn) or die("Can't bind to LDAP");
    $res = ldap_search($conn,$dn,"someID=123456789");
    $info = ldap_get_entries($conn, $res);
    $entry = ldap_first_entry($conn, $res);
    $jpeg_data = ldap_get_values_len( $conn, $entry, "someimage-jpeg");
    $jpeg_filename = '/tmp/' . basename( tempnam ('.', 'djp') );
    $outjpeg = fopen($jpeg_filename, "wb");
    fwrite($outjpeg, $jpeg_data[0]);
    fclose ($outjpeg);
    copy ($jpeg_filename, '/some/dir/test.jpg');
    unlink($jpeg_filename);
?>

Groovy の例 (動かない)

def ldap = org.apache.directory.groovyldap.LDAP.newInstance('ldap://ldap.example.com/ou=People,o=Acme')

ldap.eachEntry (filter: 'someID=123456789') { entry ->

    new File('/Some/dir/123456789.jpg').withOutputStream {
        it.write entry.get('someimage-jpeg').getBytes()  // File is created, but image is corrupted (size also doesn't match the PHP version)
    }

}

「image-jpeg」が実際にはバイナリであり、文字列ではないことを Apache LDAP ライブラリに伝えるにはどうすればよいですか? LDAP サーバーからバイナリ データを読み取るための、よりシンプルなライブラリはありますか? Apache メーリング リストを見ると、他の誰かが同様の問題を抱えていましたが、スレッドで解決策を見つけることができませんでした。

技術スタック

4

2 に答える 2

1

画像の属性値が base-64 でエンコードされているかどうかを確認しましたか?

于 2013-03-30T13:38:44.453 に答える