微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 使用jquery ajax下载二进制文件

我试图使用jquery ajax下载二进制音频文件.

通常我会发出这样的命令:

 windows.location.href = 'http://marksdomain(dot)com/audioFile.wav' ;

但是,最近我们的服务器等待响应的时间太长了,我得到一个讨厌的网关超时消息.

有人建议我使用jquery-ajax,这是有道理的,因为那时我会更多地控制超时.

这是我到目前为止玩过的代码

$.ajax(
    { url:   'http://marksdomain(dot)com/audioFile.wav'
    , timeout:      999999
    , dataType: 'binary'
    , processData:  false     // this one does not seem to do anything ?
    , success: function(result)  {
           console.log(result.length);
      }
    , error: function(result, errStatus, errorMessage){
            console.log(errStatus + ' -- ' + errorMessage);
      }

当我省略“dataType”时,二进制文件的大小比服务器上实际大三倍.但是,当我使dataType等于“binary”时,ajax会抛出一个错误

"No conversion from text to binary"

从一些早期的帖子中,听起来好像jquery-ajax无法以这种方式处理二进制文件.

我确实发现Delivery.js实际上对于我正在尝试的东西非常有效,但我宁愿不使用节点解决方案.

有什么建议么?

解决方法:

只需直接使用XHR即可.此示例取自MDN

var oReq = new XMLHttpRequest();
oReq.open("GET", "/myfile.png", true);
oReq.responseType = "arraybuffer";

oReq.onload = function(oEvent) {
  var arrayBuffer = oReq.response;

  // if you want to access the bytes:
  var byteArray = new Uint8Array(arrayBuffer);
  // ...

  // If you want to use the image in your DOM:
  var blob = new Blob([arrayBuffer], {type: "image/png"});
  var url = URL.createObjectURL(blob);
  someImageElement.src = url;

  // whatever...
};

oReq.send();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐