8

我是 JQuery 新手,我想使用 JQuery Ajax 将一些文件上传到服务器,仅在 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);
4

1 回答 1

5

大多数(全部?)浏览器在通过XMLHttpRequest. 当您将文件作为二进制字符串读取时,您会得到确切的信息:一个 JavaScript 字符串对象,其中每个字符都是 0 到 255 之间的值。

要强制 AJAX 请求发送二进制编码数据,数据参数必须是ArrayBufferFileBlob对象。

如果您需要在发送之前访问文件的内容,可以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);
}

然后您将arrBuff实例传递给 AJAX 函数。否则,您应该能够将File对象本身传递给 AJAX 函数,而无需编写所有FileReader代码。

于 2012-10-25T16:59:58.590 回答