如何通过JQuery-Ajax-PUT方法发送二进制数据

如何通过JQuery-Ajax-PUT方法发送二进制数据,jquery,ajax,upload,binaryfiles,put,Jquery,Ajax,Upload,Binaryfiles,Put,我对JQuery和 我想使用jqueryajax将一些文件上传到服务器,只使用PUT方法。 当我将一些二进制文件(如gif或jpeg)发送到服务器时,上载成功,但二进制数据的内容发生了更改(它总是大于原始文件大小)。 我试图更改内容类型或文件结果的类型,但仍然不起作用。 有人知道怎么解决这个问题吗 PS:我不能将二进制文件的内容编码成其他形式,因为我不能触摸服务器的代码 var reader = new FileReader(); reader.onloadend = (function(Th

我对JQuery和 我想使用jqueryajax将一些文件上传到服务器,只使用PUT方法。 当我将一些二进制文件(如gif或jpeg)发送到服务器时,上载成功,但二进制数据的内容发生了更改(它总是大于原始文件大小)。 我试图更改内容类型或文件结果的类型,但仍然不起作用。 有人知道怎么解决这个问题吗

PS:我不能将二进制文件的内容编码成其他形式,因为我不能触摸服务器的代码

var reader = new FileReader();

reader.onloadend = (function(Thefile) {

    $.ajax({
        url: url,
        processData:false,
        //contentType:"application/octet-stream; charset=UTF-8",
        data: file.result,
        type: 'PUT',
        success : function(){console.log("OK!");},
        error : function(){console.log("Not OK!");}
    }); 
})(file);

reader.readAsBinaryString(file);
大多数(所有?)浏览器在通过
XMLHttpRequest
发送字符串数据类型时会自动将其转换为UTF-8。当您以二进制字符串的形式读取文件时,会得到一个JavaScript字符串对象,其中每个字符的值都在0到255之间

要强制AJAX请求发送二进制编码的数据,数据参数必须是
ArrayBuffer
文件
Blob
对象

如果在发送前需要访问文件内容,可以使用以下代码将二进制字符串转换为
ArrayBuffer

var arrBuff = new ArrayBuffer(file.result.length);
var writer = new Uint8Array(arrBuff);
for (var i = 0, len = file.result.length; i < len; i++) {
    writer[i] = file.result.charCodeAt(i);
}
var arrBuff=newarraybuffer(file.result.length);
var writer=新的Uint8Array(arrBuff);
对于(var i=0,len=file.result.length;i

然后将
arrBuff
实例传递给AJAX函数。否则,您应该能够将
文件
对象本身传递到AJAX函数中,而不必使用所有
文件阅读器
代码。

我遇到了类似的问题。我的第一个猜测是,这与
ajax
函数在发送请求之前处理数据的方式有关。不管jQuery的ajax机制如何,请注意,您应该将函数分配给reader.onloadend-不要自己调用该函数!