Метод POST xmlhttprequest в рельсах - PullRequest
0 голосов
/ 29 июля 2010

В Интернете я создаю локальную загрузку файлов с помощью перетаскивания на сервер с помощью ruby ​​на рельсах, перетаскивание файла работает нормально, но как получить содержимое перетаскиваемого файла в контроллере с помощью события 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 Метод отправки без вызова контроллера с соответствующим действием

Как получить requestbody в контроллере?

Есть идеи?

1 Ответ

0 голосов
/ 29 июля 2010

Во-первых, используйте какую-нибудь библиотеку javascript для работы с AJAX и почти все остальное. Я бы предложил jQuery (http://jquery.com/)

К сожалению, ни один браузер не поддерживает загрузку файлов через XmlHttpRequest. Прочитайте некоторое время назад о поддержке Firefox, но это будет ограничением, и я даже не уверен, что это действительно работает.

Вы можете создать iframe и с помощью события drop установить поле файла внутри iframe, а затем отправить iframe.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...