2015-10-13 123 views
1

我试图让用户上传文件到我的服务器。我被迫在后端使用Coldfusion MX 7。通过AJAX/FormData在后端使用coldfusion上传文件

我正在使用FormData构造函数并通过ajax发送文件。

以下是构建表单并发送数据的客户端代码。变量f是我想要上传的File对象。

_submit: function (e) { 
    var f = this.$.agenda.file; 
    var req = new XMLHttpRequest(); 
    var data = new FormData(); 
    data.append('upload', f); 
    req.onreadystatechange = function() { 
     if (req.readyState == XMLHttpRequest.DONE) { 
     console.log(req) 
     } 
    }.bind(this); 
    req.open("POST", "validator.cfc?method=uploadfile"); 
    req.send(data); 
    } 
}); 

这是cfcomponent/cffunction应做服务器端的工作:

<cfcomponent output="false"> 
    <cffunction name="uploadfile" access="remote" returnType="string"> 
    <cffile action="upload" filefield="upload" 
    destination="data/" 
    nameconflict="makeunique" 
    result="uploadResult"> 
    <cfreturn uploadResult> 
    </cffunction> 

当我尝试,虽然使用它,我得到了冷聚变的错误,指出:

String index out of range: -20 
The error occurred on line 45 
43 :  <cffile action="upload" filefield="upload" 
44 :  destination="data/" 
45 :  result="uploadResult"> 
46 :  <cfreturn uploadResult> 
47 : </cffunction> 

我在做什么错在这里,任何人都可以帮忙吗?无论是加密类型是默认的

+0

这个调用之前'f'包含了什么'data.append('upload',f);'? –

+0

@ Miguel-F啊! F实际上不是文件。我不小心只是抓住文件名。现在,F指向文件(问题中的代码保持不变),但我得到一个新的错误。我正在编辑问题以反映这 – LukeP

回答

1

我想我不得不改变destination参数使用的完整路径。

现在一切正常。

0

,你可能仍然需要显式设置形式:

<form action="yourActionPage.cfm" method="post" enctype="multipart/form-data"> 
+0

我很抱歉,这不是问题,请参阅我的编辑和我对@ Miguel-F的评论。这个答案应该可能被删除。 – LukeP