gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:41:19 31 4
gpt4 key购买 nike

我是 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);

最佳答案

大多数(全部?)浏览器在通过 XMLHttpRequest 发送字符串数据类型时会自动将字符串数据类型转换为 UTF-8。当您以二进制字符串形式读取文件时,您得到的正是:一个 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 代码。

关于jquery - 如何通过 JQuery Ajax PUT 方法发送二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11448578/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com