Coldfusion 如何使用cfldap更改用户映像?

Coldfusion 如何使用cfldap更改用户映像?,coldfusion,ldap,Coldfusion,Ldap,我能够从cfldap中获得我想要的所有值。 但是当我尝试更新用户图像时,我不知道如何发送二进制图像属性的正确值 我尝试从cffile上传中获取图像变量 <cffile action="UPLOAD" filefield="file" destination="c:\inetpub\wwwroot\test" nameconflict="OVERWRITE" result="image" /> 还尝试将cfimage与静态图像一起使用- <cfimage action="

我能够从cfldap中获得我想要的所有值。 但是当我尝试更新用户图像时,我不知道如何发送二进制图像属性的正确值

我尝试从cffile上传中获取图像变量

<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这样的二进制代码,而现在,没有类似的

当我试着展示照片的时候

这是一个正确的图像。。。。

编辑:下面的原始代码示例显示了如果ColdFusion在CFLDAP中没有错误(或“非常不幸的设计决策”),它将如何工作

CFLDAP对发送到服务器之前传递给它的参数值进行编码。这很好,因为您不必担心值编码。但是这也没有什么帮助,因为这意味着您不能再自己发送编码的值,因为CF总是再次编码它们

底线:就LDAP而言,将文件编码为十六进制字符串是正确的,但CFLDAP在将其发送到服务器之前会破坏该字符串。结合CFLDAP不接受原始二进制数据的事实,这意味着您不能使用它来更新二进制属性

注释中包含了一个关于第三方命令行工具的建议,该工具可以轻松地用CFLDAP替代此任务


您需要向服务器发送一个编码字符串作为属性值。LDAP查询中二进制数据的编码方案的形式为
attribute=\01\02\03\ab\af\cd

将图像读入字节数组,将该数组编码为十六进制字符串,并在每个编码字节前加上反斜杠



另外,不要忘记关于
modifyType

我收到了这个错误,因为看起来我正在向big发送一个数据,以获取在尝试执行modify时发生错误的值:[LDAP:错误代码19-00002082:AtError:DSID-03151314,#1:0:00002082:,问题1005(约束类型),数据0,ATT 160023(缩略图照片):len 466635]。请参阅。
thumbnailPhoto
大小限制为100 Kb,建议大小为96 x 96像素。使用CF的照片编辑功能制作图像的实际缩略图。也比较一下,尤其是
rangeUpper
部分。所以,实际上,网络人员骗我说管理员用户有权更改ldap帐户。。。现在它有,我没有收到错误,我没有权限。。。无论如何,当我这样做的时候,我收到一个奇怪的二进制文件。。。将用数据更新我的问题,并image@GuilhermeSilva管理员用户绝对有权更改照片。不过,并不是你看到的每一条“拒绝访问”的消息实际上都意味着“拒绝访问”。对不起,网络管理员有一个我正在使用的web管理员用户。。。这个用户以前没有所有权限。。。抱歉,现在它有特权。。。我发送的图像是96x96,小于100kb,但没有更新成功
<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"
>