html - 在 Chrome 上通过 XHR 发送图像文件

标签 html google-chrome xmlhttprequest

我正在使用 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));
    };
  };
};

最佳答案

有几个因素可能是罪魁祸首。您将文件作为二进制字符串读取,然后创建多部分请求,然后发送 Base64 编码值。

无需读取文件或搞乱 Base64 编码。相反,只需构造一个 FormData 对象,附加文件,然后使用 xhr.send(formData) 直接发送该文件。查看我的回复 here .

关于html - 在 Chrome 上通过 XHR 发送图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098128/

相关文章:

javascript - 使用 Ajax 加载页面时,返回按钮不起作用

javascript - xhr 缓存 getResponseHeader 中的值?

javascript - 渐进增强技巧

css - Chrome 无法估计粗体字重

css - 为什么背景图片不显示?

javascript - 谷歌浏览器中没有 www 子域的页面显示不同

javascript - 我们可以使用来自 Webworker 的 JavaScript FileSystemAPI 吗?

javascript - 在 XMLHttpRequest 之后加载 jQuery 选项卡

javascript - iFrame javascript 影响父 DOM

Javascript\jQuery : is it possible to overlay elements using x and y coordinates?