【问题标题】:How to get file size of a remote mp3 using jQuery?如何使用 jQuery 获取远程 mp3 的文件大小?
【发布时间】:2021-09-11 01:04:59
【问题描述】:

我正在寻找一种方法来阅读远程托管的 MP3。我发现了一些东西(How to get file size from url using jquery),无需下载即可阅读:

var req;
req = $.ajax({
type: "HEAD",
url: $("#url").val(),
success: function () {
  alert("Size is " + request.getResponseHeader("Content-Length"));
}
});

但是我很难让它与我的代码一起工作。我要做的是,当您单击按钮时,它会获取远程 MP3 的文件大小并将数据保存到div

这是我目前得到的:

$(function() {
  $('#btn').click(function() {
    var audio = $("#audio-1")[0];
    var request;
    $("#duration").html(audio.duration);
    
    request = $.ajax({
      type: "HEAD",
      url: $("#audio-1").val(),
      success: function() {
        $("#size").html(request.getResponseHeader("Content-Length"));
      }
    });
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Duration: <div id="duration"></div>
Size: <div id="size"></div>

<button id="btn">Click</button>
<audio id="audio-1" src="https://media.acast.com/dth/weekinreviewfortheweekof6-21-21-dth/media.mp3" preload="metadata"></audio>

【问题讨论】:

    标签: javascript jquery ajax mp3 html5-audio


    【解决方案1】:

    问题是因为您试图访问audio 元素的val(),但它们没有值。要解决此问题,请改为获取 src 属性:

    $(function() {
      var $audio = $("#audio-1");
    
      $('#btn').click(function() {
        $("#duration").html($audio.prop('duration'));
    
        $.ajax({
          type: "HEAD",
          url: $audio.prop('src'),
          success: function(data, status, request) {
            $("#size").html(request.getResponseHeader("Content-Length"));
          }
        });
      });
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    Duration:
    <div id="duration"></div>
    Size:
    <div id="size"></div>
    
    <button id="btn">Click</button>
    <audio id="audio-1" src="https://media.acast.com/dth/weekinreviewfortheweekof6-21-21-dth/media.mp3" preload="metadata"></audio>

    请注意,您可以从success 处理函数的第三个参数访问request 对象。代码在逻辑上是相同的,只是稍微简洁一些,因为您无需在更高的范围内声明变量。

    【讨论】:

    • 但还要注意,音频将下载到用户的计算机,因为它在音频标签中
    • 这太棒了!对我来说这是一个好的开始,但如果 MP3 超过 98MB,则它不会读取文件。
    • 您可能会将 AJAX 调用转换为侦听 headers_received 状态而不是 done(这意味着转换为原生 XMLHttpRequest 而不是 jQuery)但是文件很可能仍会被下载通过浏览器。
    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 2019-04-27
    相关资源
    最近更新 更多