使用纯JavaScript上传二进制文件

Jor*_*Wii 5 javascript ajax html5 mootools google-chrome

我正在开发一款使用HTML5文件系统API的Chrome应用,并允许用户导入和同步文件.我遇到的一个问题是,如果用户尝试同步图像文件,则在上传到服务器的过程中文件会被破坏.我假设它是因为它们是二进制的.

为了上传,我选择只发出一个Ajax POST请求(使用MooTools),然后将文件内容作为请求的主体.我告诉MooTools关闭urlEncoding并将charset设置为"x-user-defined"(不确定是否有必要,我只是在某些网站上看到它).

鉴于Chrome不支持xhr.sendAsBinary,是否有人有任何示例代码允许我通过Ajax发送二进制文件?

ebi*_*del 7

FF xhr.sendAsBinary()不是标准的.XHR2支持发送文件(xhr.send(file))和blobs(xhr.send(blob)):

function upload(blobOrFile) {
  var xhr = new XMLHttpRequest();
  xhr.open('POST', '/server', true);
  xhr.onload = function(e) { ... };

  // Listen to the upload progress.
  xhr.upload.onprogress = function(e) { ... };

  xhr.send(blobOrFile);
}
Run Code Online (Sandbox Code Playgroud)

你也可以发一个ArrayBuffer.