当前位置: 首页 > 面试题库 >

使用jQuery AJAX下载二进制文件

长孙星汉
2023-03-14
问题内容

我正在尝试使用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();


 类似资料:
  • 问题内容: 我正在尝试使用以下方法下载此文件(http://github.com/downloads/TheHolyWaffle/ChampionHelper/ChampionHelper-4.jar),但似乎无法正常工作。我收到一个空文件/损坏的文件。 但是我可以使用相同的方法从我的保管箱(http://dl.dropbox.com/u/13226123/ChampionHelper-4.jar

  • 问题内容: 使用带有角的ResponseEntity下载任何文件不起作用 我需要在客户端使用angular下载文件,该文件可以具有pdf或excel或image或txt的任何格式…我的方法仅适用于txt文件,但给我excel和image的失败格式,对于pdf,它会给出一个空的pdf。 所以在我的控制器中,这里是调用service方法的函数: 而我的service.js具有: 我的服务方法是这样的:

  • 我在android应用程序中使用OKHTTP客户端进行网络连接。 接受下面的回答。我修改过的代码:

  • 问题内容: 我有存储在MySQL表longblob字段中的Excel电子表格。我需要检索此数据,然后将其作为可下载文件流式传输给用户,最好不要先将其写入磁盘。 可能? 编辑-嗯,刚想出来…在下面的答案中发布。 问题答案:

  • 我试图下载一个二进制文件,并将其原始名称保存在磁盘上(linux)。 有什么想法吗?

  • 问题内容: 我在从互联网下载我的应用程序中的二进制文件时遇到问题。在Quicktime中,如果我直接下载它,则可以正常工作,但是通过我的应用程序,它会以某种方式混乱(即使它们在文本编辑器中看起来完全一样)。这是一个例子: 问题答案: 我不知道这是否是唯一的问题,但是你在其中遇到了典型的Java故障:你没有指望总是允许read()返回的字节数少于你要求的字节数。因此,你的读取可能会少于1024个字节