我是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);
答案 0 :(得分:3)
大多数(全部?)浏览器在通过XMLHttpRequest
发送时会自动将字符串数据类型转换为UTF-8。当您将文件作为二进制字符串读取时,您将获得以下内容:JavaScript字符串对象,其中每个字符的值介于0到255之间。
要强制AJAX请求发送二进制编码数据,数据参数必须是ArrayBuffer
,File
或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);
}
然后你将arrBuff
实例传递给AJAX函数。否则,您应该能够将File
对象本身传递到AJAX函数中而不需要所有FileReader
代码。