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) {} }); 

当我在本地运行时(在OS X上的Safari 6.0.5中),我得到211300.但是,实际文件似乎是218882字节。 使用完全ASCII的东西(例如http://www.angio.net/pi/digits/pi1000000.txt ),它似乎正常工作。

我不需要下载文件,而是使用其内容。

有没有办法让ajax使用二进制文件(客户端或服务器端)而不需要使用base64?

我认为你需要使用类型化数组 。 Javascript处理二进制的方式。 没有其他方法可以处理纯二进制数据。 但是对于类型化数组,您几乎可以在其他任何地方执行您想要使用二进制文件的所有操作。

使用Ajax发送类型化数组

 var myArray = new ArrayBuffer(512); var longInt8View = new Uint8Array(myArray); for (var i=0; i< longInt8View.length; i++) { longInt8View[i] = i % 255; } var xhr = new XMLHttpRequest; xhr.open("POST", url, false); xhr.send(myArray); 

接收类型数组

2种方法...... 首先

 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(); 

资料来源: https : //developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data

使用Jquery

发送: $.ajax(url,{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); } }); 

推车最差的车轮噪音最大! 在这里寻求更好的解决方案

http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/

在这里演示

http://jqueryfiledownload.apphb.com/

完全测试:
Internet Explorer 6 – 9
Firefox 11 – 相当肯定它可以在早期版本上运行
Chrome 17 – 相当确定它适用于早期版本

备注:需要jQuery 1.3+。

更新:

虽然没试过

 $.ajax({ url: controllerUrl, type: 'Get', contentType: "application/pdf", beforeSend: function (xhr) { xhr.overrideMimeType('text/plain; charset=UTF-8') //alert({ message: "Processing..." }); }, success: function (data) { alert('Wga!'); }, complete: function (data) { alert('close'); }, error: function (jqXHR,textStatus) { alert("whoops"); }