通过AJAX/FormData在后端使用coldfusion上传文件
问题描述:
我试图让用户上传文件到我的服务器。我被迫在后端使用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>
我在做什么错在这里,任何人都可以帮忙吗?无论是加密类型是默认的
答
我想我不得不改变destination
参数使用的完整路径。
现在一切正常。
答
,你可能仍然需要显式设置形式:
<form action="yourActionPage.cfm" method="post" enctype="multipart/form-data">
+0
我很抱歉,这不是问题,请参阅我的编辑和我对@ Miguel-F的评论。这个答案应该可能被删除。 – LukeP
这个调用之前'f'包含了什么'data.append('upload',f);'? –
@ Miguel-F啊! F实际上不是文件。我不小心只是抓住文件名。现在,F指向文件(问题中的代码保持不变),但我得到一个新的错误。我正在编辑问题以反映这 – LukeP