Отправить файл изображения через XHR на Chrome - PullRequest
2 голосов
/ 11 ноября 2011

Я использую перетаскивание HTML5 для получения изображений с компьютера пользователя и хочу загрузить их на мой сервер Rails (с этой целью используется Carrierwave).Я не знаю точно, что я делаю здесь, но собрал этот код из этих инструкций http://code.google.com/p/html5uploader/wiki/HTML5Uploader

Это возвращает ошибку 500 - может кто-нибудь взглянуть и помочь мне с тем, что яделаешь неправильно?

var files = e.dataTransfer.files;
if (files.length){
  for (var i = 0; i<files.length; i++) {
    var file = files[i];
    var reader = new FileReader();
    reader.readAsBinaryString(file);
    reader.onload = function() {
      var bin = reader.result;
      var xhr = new XMLHttpRequest();
      var boundary = 'xxxxxxxxx';
      xhr.open('POST', '/images?up=true&base64=true', true);
      xhr.setRequestHeader('content-type', 'multipart/form-data; boundary=' + boundary);
      xhr.setRequestHeader('UP-FILENAME', file.name);
      xhr.setRequestHeader('UP-SIZE', file.size);
      xhr.setRequestHeader('UP-TYPE', file.type);
      xhr.send(window.btoa(bin));
    };
  };
};

1 Ответ

3 голосов
/ 12 ноября 2011

Есть несколько вещей, которые могут быть виновником. Вы читаете файл как двоичную строку, затем создаете многочастный запрос, а затем отправляете значение в кодировке base64.

Нет необходимости читать файл или связываться с кодировкой base64. Вместо этого просто создайте объект FormData, добавьте файл и отправьте его напрямую, используя xhr.send(formData). Смотрите мой ответ здесь .

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