【问题标题】:partially download a file with Javascript使用 Javascript 部分下载文件
【发布时间】:2012-11-22 04:19:04
【问题描述】:

我们实际上正在使用 javascript 开发远程音乐库管理器,我想知道是否有一种方法可以使用 js 下载 MP3 文件的最后 128 字节以获得其 ID3 标签。谢谢。

【问题讨论】:

    标签: javascript html web-applications id3


    【解决方案1】:

    您不能仅使用 JavaScript 来做到这一点。您需要服务器上的某些东西(这完全取决于您的服务器端技术)来读取文件的相关部分。然后在 JavaScript 中,您可以调用该服务器端部分。

    更新 1

    HTTP 协议支持部分下载文件(就是这样)。但当然 HTTP 对 MP3 文件一无所知,因此您必须知道文件的哪个范围包含 JavaScript 中的 ID3 标记。

    更新 2

    在纯 JavaScript 中仅下载一段 URL 似乎比我最初预期的更可行:

    xhr = new XMLHttpRequest();
    xhr.open("GET", "http://<your domain>/");
    xhr.setRequestHeader("Range", "bytes=-256");
    xhr.send();
    

    这会请求远程文件的最后 256 个字节。

    请注意,您的请求当然会受到通常的同源限制,因此您只能使用它从包含原始 HTML/JavaScript 的服务器中检索文件。

    【讨论】:

    • 谢谢,找到了这个:stackoverflow.com/questions/1798879/…
    • 看起来不错,如果您的服务器使用 Python。我正在查看一些较新的 HTML5 API 以了解它们支持的内容。但到目前为止,所有部分文件访问都只针对客户端文件,所以这对您没有帮助。
    • ID3v1 始终位于最后 256 个(或者是 512 个?)字节中。所以单个范围的 HTTP 请求就可以了。
    • +1 获取有关 Range 标头的更新。我用它来支持探索 .zip 的内容,它最后有一些东西告诉你在哪里寻找目录信息。这意味着我可以构建一个基于浏览器的 UI,用于在非常大的 zip 中进行探索,而无需下载整个 zip。
    • 是的,通过请求范围我可以轻松达到多远给我留下了深刻的印象。我最初查看的是 HTML5 系列中的文件 API。但再一次,答案似乎是在古老的 HTTP 中——如果我见过的话,这是一个令人印象深刻的规范。
    【解决方案2】:

    不使用服务器端编程语言:否。

    您可以使用 Ajax 和 PHP(或任何其他编程语言)来获取 ID3 标记。

    使用 jQuery,它看起来像这样:

    function getInfo(func) {
    $.ajax({
        url: "mp3info.php?file=" + url,
        dataType: "json",
        ready: function(result) {
            func(result);
        }
    });
    }
    

    你可以这样使用它:

    getInfo(function(mp3info) {
        alert(mp3info.id3);
    });
    

    那么你的 PHP 文件看起来像这样:

    <?php
    $info = array(); //The MP3 info array
    echo json_encode($info, true);
    ?>
    

    【讨论】:

    • 别忘了编写自己的函数来获取 MP3 信息。同样在我的 Javascript 示例中,您必须在信息数组中有一个 id3 键。
    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 2010-09-25
    相关资源
    最近更新 更多