我能够从cfldap获得我想要的所有值。 但是当我尝试更新用户图像时,我不知道如何为二进制图像属性发送正确的值。
我尝试从cffile upload
获取图像变量<cffile action="UPLOAD" filefield="file" destination="c:\inetpub\wwwroot\test" nameconflict="OVERWRITE" result="image" />
还尝试将cfimage与静态图像一起使用 -
<cfimage action="read" source="c:\inetpub\wwwroot\test\image.png" name="anotherImage">
甚至是
<cffile action="READBINARY" file="c:\inetpub\wwwroot\test\image.png" variable="BinaryImageContent">
但无论如何,当我打电话时
<cfldap action="modify"
DN="#results.dn#"
attributes="thumbnailPhoto=#obj.image#"
modifytype="replace"
server="myserver"
username="mydomain\myuser"
password="mypass">
#results.dn#是我之前收到的用户的DN(一切都好) 我创建了#obj.image#以便能够尝试所有类型的变量
也试过这些参数:
<cfset obj.test1 = BinaryImageContent />
<cfdump var="#imageGetBlob(anotherImage)#" />
<cfdump var="#toString(obj.test1)#" />
顺便说一下,我得到它的错误
一个或多个必需属性可能缺失或不正确或 您无权在服务器上执行此操作。
问题是我使用域管理员帐户来更新
(这个错误已经解决了 - 网络人员没有给我这个许可......现在我有了。)
现在我正在使用的是以下内容:
<cffile action="UPLOAD" filefield="file" destination="c:\inetpub\wwwroot\test" nameconflict="OVERWRITE" result="imagem" />
<cfset filename = "C:\inetpub\wwwroot\test\#imagem.serverFile#">
<cffile action="readbinary" file="#filename#" variable="img">
<cfset imgStr = BinaryEncode(img, "hex")>
<cfset imgStr2 = REReplace(imgStr, "..", "\\\0", "ALL")>
<cfldap
action="modify"
DN="#results.dn#"
attributes="thumbnailPhoto=#imgStr2#"
modifytype="replace"
server="myserver"
username="mydomain\myuser"
password="mypass"
>
但是我得到了这个二进制代码
奇怪的是,在我有一个像-1-41这样的二进制代码之前,现在没有类似的......
当我试图显示图片时
答案 0 :(得分:2)
编辑:下面的原始代码示例显示了如果ColdFusion在CFLDAP中没有错误(或“非常不幸的设计决策”), 的工作方式。< / p>
CFLDAP在将它们发送到服务器之前对您传递给它的参数值进行编码。这很好,因为您不必担心值编码。但是......它也没有帮助,因为它意味着你不能再自己发送编码值了,因为CF总是将它们再次编码为。
结论:就LDAP而言,将文件编码为十六进制字符串是正确的,但CFLDAP在将该字符串发送到服务器之前会破坏该字符串。结合CFLDAP不接受原始二进制数据这一事实,这意味着您无法使用它来更新二进制属性。
这些评论包含对第三方命令行工具的建议,该工具可以轻松替代CFLDAP执行此任务。
您需要将编码的字符串作为属性值发送到服务器。 LDAP查询中二进制数据的编码方案的格式为attribute=\01\02\03\ab\af\cd
。
将您的图像读入字节数组,将该数组编码为十六进制字符串,并使用反斜杠为每个编码字节添加前缀。
<击> 击>
<击><cffile action="readbinary" file="#filename#" variable="img">
<cfset imgStr = BinaryEncode(img, "hex")>
<cfset imgStr = REReplace(imgStr, "..", "\\\0", "ALL")>
<cfldap
action="modify"
DN="#results.dn#"
attributes="thumbnailPhoto=#imgStr#"
modifytype="replace"
server="myserver"
username="mydomain\myuser"
password="mypass"
>
击> <击> 撞击>
另外,请不要忘记modifyType
对$param_array = array(
array(
'var_1' => 1,
'var_2' => 2,
),
array(
'var_1' => 3,
'var_2' => 4,
),
);
$result = $client->call('test', array('param_1' => 123, 'param_2' => $param_array));
的评论。