使用Javascript部分下载文件

7

我们正在使用JavaScript工作,开发一款远程音乐库组织管理器。我想知道是否有一种方法可以使用JavaScript下载MP3文件的最后128个字节,以获取其ID3标签。谢谢。

2个回答

12

仅靠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的服务器检索文件。


1
谢谢,找到了这个:https://dev59.com/MnI-5IYBdhLWcg3wipBk - coolcoolcool
如果你的服务器使用Python,看起来不错。我正在查看一些较新的HTML5 API,以了解它们支持什么。但是到目前为止,所有部分文件访问都是针对客户端文件的,所以这对你没有帮助。 - Frank van Puffelen
1
ID3v1总是在最后的256(或者是512?)个字节中。因此,单个范围的HTTP请求就足够了。 - ThiefMaster
1
对于“Range”头的更新表示赞赏。我使用它来支持探索.zip文件的内容,其中有一些内容告诉您在哪里查找目录信息。这意味着我可以构建一个基于浏览器的用户界面,以便在不下载整个zip文件的情况下探索非常大的zip文件内部。 - Daniel Earwicker
1
是的,我对于通过请求范围所能轻松获得的成果感到相当印象深刻。 我最初查看了HTML5系列中的文件API,但再次发现答案似乎在于老牌HTTP——如果我曾见过一个令人印象深刻的规范,那就是HTTP。 - Frank van Puffelen
非常好的回答,我喜欢你对结果的热情。 :D - Michael Gaskill

1

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

您可以使用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键。 - Dillen Meijboom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接