Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用纯JavaScript上传二进制文件_Javascript_Ajax_Html_Google Chrome_Mootools - Fatal编程技术网

使用纯JavaScript上传二进制文件

使用纯JavaScript上传二进制文件,javascript,ajax,html,google-chrome,mootools,Javascript,Ajax,Html,Google Chrome,Mootools,我正在开发一个Chrome应用程序,它使用HTML5文件系统API,允许用户导入和同步文件。我遇到的一个问题是,如果用户尝试同步图像文件,文件在上传到服务器的过程中会损坏。我想这是因为它们是二进制的 对于上传,我选择只发出一个Ajax POST请求(使用MooTools),然后将文件内容作为请求的主体。我告诉MooTools关闭urlEncoding并将字符集设置为“x-user-defined”(不确定是否有必要,我只是在一些网站上看到) 鉴于Chrome不支持xhr.sendAsBinary

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

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


鉴于Chrome不支持xhr.sendAsBinary,有没有人有任何示例代码可以让我通过Ajax发送二进制文件?

如果您正在编写服务器,那么您只需将读取的字节转换为纯文本,发送到服务器,然后解码回来

下面是最简单的方法(不是很有效,但这只是为了展示技术)——

将从文件中读取的每个字节转换为两个十六进制字符的字符串。如果读取字节53(十进制),则将其转换为“45”(53的十六进制表示)。将所有这些字符串连接在一起,并将结果字符串发送到服务器


在服务器端,在偶数位置断开字符串,将每对数字转换为一个字节。

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


您还可以发送一个
ArrayBuffer

使用base64和JavaScript函数
atob
btoa
不是更有效吗?
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);
}