在网络上,我正在构建本地文件拖放上传到服务器上的ruby on rails,拖放文件工作正常,但如何使用drop事件获取控制器中拖动的文件内容?我正在使用event.datatransfer
获取文件,通过Javascript使用XMLHttpRequest
发送文件。
function handleDrop(event)
{
preventDef(event)
var dt = event.dataTransfer;
var files = dt.files;
for(var i = 0; i < files.length;i++)
{
http_request = new XMLHttpRequest();
var boundaryString = 'the_boundery--';
var boundary = '--' + boundaryString;
var requestbody = boundary + '\n'
+ 'Content-Disposition: form-data; name="thefilename"' + '\n'
+ '\n'
+ files[i].fileName + '\n'
+ '\n'
+ boundary + '\n'
+ 'Content-Disposition: form-data; name="thefile"; filename="'
+ files[i].fileName + '"' + '\n'
+ 'Content-Type: application/octet-stream' + '\n'
+ '\n'+files[i].path
+'\n'+ files[i].getAsBinary()
+ '\n'
+ boundary;
var preview = document.getElementById("preview");
preview.src = files[i].getAsDataURL();
var queryString="";
queryString="filename="+files[i].fileName+'&'+"file_to_upload=="+files[i].getAsBinary();
var actionUrl="/shortening/dr";
http_request.open('POST',actionUrl,true);
http_request.setRequestHeader("Content-type", "multipart/form-data; \
boundary=\"" + boundaryString + "\"");
http_request.setRequestHeader("Connection", "close");
http_request.setRequestHeader("Content-length", requestbody.length);
http_request.sendAsBinary(requestbody);
}
}
使用此脚本调用url并通过sendAsBinary方法发送文件 Post方法没有使用相应的操作调用控制器
如何在控制器中获取请求者?
有什么想法吗?
答案 0 :(得分:0)
首先,使用某种javascript库来执行AJAX以及其他所有操作。我建议使用jQuery(http://jquery.com/)
不幸的是,没有浏览器支持通过XmlHttpRequest上传文件。 前段时间读过一些关于Firefox支持它的东西,但这会受到限制,我甚至不确定它是否真的有效。
您可以制作iframe并使用drop事件,在iframe中设置文件字段,然后提交iframe。