在rails中的xmlhttprequest POST方法

时间:2010-07-29 12:32:56

标签: javascript ruby-on-rails

在网络上,我正在构建本地文件拖放上传到服务器上的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方法没有使用相应的操作调用控制器

如何在控制器中获取请求者?

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

首先,使用某种javascript库来执行AJAX以及其他所有操作。我建议使用jQuery(http://jquery.com/

不幸的是,没有浏览器支持通过XmlHttpRequest上传文件。 前段时间读过一些关于Firefox支持它的东西,但这会受到限制,我甚至不确定它是否真的有效。

您可以制作iframe并使用drop事件,在iframe中设置文件字段,然后提交iframe。