2015-10-15 22 views
0

我能够从cfldap获取所需的所有值。 但是当我尝试更新用户图像时,我不知道如何发送二进制图像属性的正确值。如何使用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#,以便能够尝试所有类型的变量

而且尝试这些PARAMS:

<cfset obj.test1 = BinaryImageContent /> 
    <cfdump var="#imageGetBlob(anotherImage)#" /> 
    <cfdump var="#toString(obj.test1)#" /> 

顺便说一句,我得到它的

一个或多个所需的属性的错误可能丢失或不正确或 你做的不是H ave权限在服务器上执行此操作。

的问题是,我使用的域管理员帐户来更新

(此错误是解决 - 网络人员没有给我这个权限...现在我有它)。

现在我使用的是以下几点:

<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" 
> 

,但我得到这个二进制代码

enter image description here

请告诉我奇怪的是,之前我有一个二进制代码像-1 -41和现在,没有什么类似的...

当我试图显示图片

enter image description here

这是一个正确的图像.... enter image description here

回答

2

编辑:下面的原代码示例展示了如何可能工作,如果ColdFusion的不会有错误(或者“非常不幸的设计决定“)在CFLDAP中。

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" 
> 

而且不要忘了the documentation有什么看法modifyType

+0

我得到这个错误,因为它看起来像我发送一个数据到大值为 尝试执行修改时发生错误:[LDAP:错误代码19 - 00002082:AtrErr:DSID-03151314,# 1:0:00002082:,问题1005(CONSTRAINT_ATT_TYPE),数据0,Att 160023(thumbnailPhoto):len 466635]。 –

+0

参见http://blog.cjwdev.co.uk/2010/11/03/the-thumbnailphoto-attribute-explained/。 “thumbnailPhoto”大小限制为100 Kb,建议大小为96 x 96像素。使用CF的照片编辑功能来制作一张真实的缩略图。同时比较[thumbnailPhoto'上的MSDN](https://msdn.microsoft.com/en-us/library/cc221395.aspx),尤其是'rangeUpper'部分。 – Tomalak

+0

所以,实际上网络伙计骗我,管理员用户有权更改ldap帐户...现在它已经和我没有收到错误,我没有权限... 无论如何,我收到奇怪的二进制,当我这样做...将更新我的问题与数据和图像 –