Javascript jQuery Ajax-下载不完整(二进制)文件
这就是我所拥有的:Javascript jQuery Ajax-下载不完整(二进制)文件,javascript,jquery,ajax,Javascript,Jquery,Ajax,这就是我所拥有的: jquery/1.10.2 $.ajax({ url: "http://samplepdf.com/sample.pdf", dataType: "text", data: "", success: function(data) { alert(data.length); }, error: function(a, b, c) {} }); 当我在OSX上的Safari6.0.5中本地运行时,我得到了2113
jquery/1.10.2
$.ajax({
url: "http://samplepdf.com/sample.pdf",
dataType: "text",
data: "",
success: function(data) {
alert(data.length);
},
error: function(a, b, c) {}
});
当我在OSX上的Safari6.0.5中本地运行时,我得到了211300。但是,实际文件似乎是218882字节。使用完全ASCII的东西,例如,它似乎可以正常工作
我不需要下载该文件,而是处理其内容
有没有办法让ajax在客户端或服务器端处理二进制文件而不使用base64?最糟糕的程序产生的噪音最大!
在这里寻找更好的解决方案
这里演示
在以下设备上进行全面测试:
Internet Explorer 6–9
Firefox 11–有理由相信它可以在早期版本上运行
Chrome 17–合理地确定它将在早期版本上工作
备注:需要jQuery 1.3+
更新:
但我没试过
最坏的车轮发出的噪音最大!
在这里寻找更好的解决方案
这里演示
在以下设备上进行全面测试:
Internet Explorer 6–9
Firefox 11–有理由相信它可以在早期版本上运行
Chrome 17–合理地确定它将在早期版本上工作
备注:需要jQuery 1.3+
更新:
但我没试过
我认为您需要使用类型化数组。Javascript处理二进制文件的方法。
没有其他方法可以处理纯二进制数据。但是,使用类型化数组,您几乎可以在任何其他地方使用二进制文件执行所有操作
使用Ajax发送类型化数组
资料来源:
使用Jquery
发送:$.ajaxurl,{data:myArray}
接收:未测试
$.ajax('https://dl.dropboxusercontent.com/u/139992952/coffee.png',{
contentType: "arraybuffer",
success: function(d){
var blob = new Blob([d], {type: "image/png"}),
u = URL.createObjectURL(blob);
}
});
我认为您需要使用类型化数组。Javascript处理二进制文件的方法。
没有其他方法可以处理纯二进制数据。但是,使用类型化数组,您几乎可以在任何其他地方使用二进制文件执行所有操作
使用Ajax发送类型化数组
资料来源:
使用Jquery
发送:$.ajaxurl,{data:myArray}
接收:未测试
$.ajax('https://dl.dropboxusercontent.com/u/139992952/coffee.png',{
contentType: "arraybuffer",
success: function(d){
var blob = new Blob([d], {type: "image/png"}),
u = URL.createObjectURL(blob);
}
});
你有什么理由想做这个客户端而不是服务器端吗?我用它进行客户端加密/解密,所以所有的东西都是二进制的。我使用PDF作为示例,因为它最容易重现错误。您使用的是GET还是POST?您是手动重建HTTPS吗?否则,服务器端是这里唯一安全的方法-客户端代码将很容易破译。必须使用服务器端编码而不是客户端脚本来处理这种情况,其他明智的基本XSS在这里可能是一个问题。你有什么理由想做这个客户端而不是服务器端吗?我用它进行客户端加密/解密,所以所有东西都是二进制的。我使用PDF作为示例,因为它最容易重现错误。您使用的是GET还是POST?您是手动重建HTTPS吗?否则,服务器端是这里唯一安全的方法-客户端代码将很容易破译。这种情况必须使用服务器端编码而不是客户端脚本来处理,其他明智的基本XSS可能是这里的一个问题。谢谢,但我实际上需要处理内容,因为我正在做一些浏览器端加密。我以PDF文件为例,因为它是二进制文件,而jQuery似乎对二进制数据有问题。谢谢,但我实际上需要处理内容,因为我正在进行一些浏览器端加密。我以PDF文件为例,因为它是二进制文件,而jQuery似乎在二进制数据方面存在问题。但是,可以让jQuery以类型化数组的形式发送/接收数据吗?如果是这样的话,怎么做呢?这是一个很好的详细答案,但问题是关于jQuery的——是否可以用jQuery做这些事情,或者必须解析为本机XMLHttpRequest?但是可以让jQuery作为类型化数组发送/接收数据吗?如果是这样的话,怎么做呢?这是一个很好的详细答案,但问题是关于jQuery的——是否可以用jQuery做这些事情,或者必须解决原生XMLHttpRequest?
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var arrayBuffer = oReq.response; // Note: not oReq.responseText
if (arrayBuffer) {
var byteArray = new Uint8Array(arrayBuffer);
for (var i = 0; i < byteArray.byteLength; i++) {
// do something with each byte in the array
}
}
};
oReq.send(null);
var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";
oReq.onload = function(oEvent) {
var blob = new Blob([oReq.response], {type: "image/png"});
// ...
};
oReq.send();
$.ajax('https://dl.dropboxusercontent.com/u/139992952/coffee.png',{
contentType: "arraybuffer",
success: function(d){
var blob = new Blob([d], {type: "image/png"}),
u = URL.createObjectURL(blob);
}
});