Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails 使用Groovy从OpenLDAP服务器读取和保存二进制图像_Grails_Groovy_Ldap_Apacheds - Fatal编程技术网

Grails 使用Groovy从OpenLDAP服务器读取和保存二进制图像

Grails 使用Groovy从OpenLDAP服务器读取和保存二进制图像,grails,groovy,ldap,apacheds,Grails,Groovy,Ldap,Apacheds,我正在尝试从OpenLDAP服务器保存一个映像。它是二进制格式的,我所有的代码看起来都正常工作,但是,图像被破坏了 然后,我尝试在PHP中实现这一点,并获得了成功,但我希望在Grails项目中实现这一点 PHP示例(有效) 我如何告诉ApacheLDAP库“image jpeg”实际上是二进制的而不是字符串?是否有更好的简单库可用于从LDAP服务器读取二进制数据?通过查看Apache邮件列表,但我在线程中找不到解决方案 技术堆栈 def ldap = org.apache.directory.g

我正在尝试从OpenLDAP服务器保存一个映像。它是二进制格式的,我所有的代码看起来都正常工作,但是,图像被破坏了

然后,我尝试在PHP中实现这一点,并获得了成功,但我希望在Grails项目中实现这一点

PHP示例(有效)

我如何告诉ApacheLDAP库“image jpeg”实际上是二进制的而不是字符串?是否有更好的简单库可用于从LDAP服务器读取二进制数据?通过查看Apache邮件列表,但我在线程中找不到解决方案

技术堆栈

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)
    }

}
  • Grails2.2.1

是否检查了图像属性值是否为base-64编码?

我找到了答案。ApacheGroovyLDAP库在后台使用JNDI。使用JNDI时,某些条目会自动读取为二进制,但如果LDAP服务器使用自定义名称,库将不知道它是二进制的

对于那些使用Grails遇到这个问题的人,下面是将特定条目设置为二进制格式的步骤

  • 创建一个名为“jndi.properties”的新属性文件,并将其添加到grails app/conf目录中(此文件夹中的所有属性文件都自动包含在类路径中)

  • 在属性文件中添加一行图像变量的名称:

    java.naming.ldap.attributes.binary=some\u custom\u image

  • 保存文件并运行Grails应用程序

下面是一些将二进制条目保存到文件的示例代码

def ldap = LDAP.newInstance('ldap://some.server.com/ou=People,o=Acme')      
ldap.eachEntry (filter: 'id=1234567') { entry ->             
    new File('/var/dir/something.jpg').withOutputStream {          
        it.write entry.image          
    }         
}

我包含了上面的PHP代码,以表明它确实是二进制的,而不是Base64编码的。好建议。
def ldap = LDAP.newInstance('ldap://some.server.com/ou=People,o=Acme')      
ldap.eachEntry (filter: 'id=1234567') { entry ->             
    new File('/var/dir/something.jpg').withOutputStream {          
        it.write entry.image          
    }         
}