使用Javascript部分下载文件

使用Javascript部分下载文件,javascript,html,web-applications,id3,Javascript,Html,Web Applications,Id3,我们实际上正在使用javascript开发一个远程音乐库管理器,我想知道是否有办法使用js下载MP3文件的最后128字节,以获取其ID3标记。谢谢。单用JavaScript是做不到的。您将需要服务器上的一些东西(具体取决于您的服务器端技术)来读取文件的相关部分。然后在JavaScript中,您可以调用服务器端部分 更新1 HTTP协议支持部分下载文件(这是。当然,HTTP对MP3文件一无所知,所以您必须知道文件的哪个范围包含JavaScript中的ID3标记 更新2 这似乎比我最初预期的在纯Ja

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

单用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();
xhr=newXMLHttpRequest();
xhr.open(“GET”,“http://”);
setRequestHeader(“范围”,“字节=-256”);
xhr.send();
这将请求远程文件的最后256个字节


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

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

您可以使用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
$info = array(); //The MP3 info array
echo json_encode($info, true);
?>
你是这样使用它的:

function getInfo(func) {
$.ajax({
    url: "mp3info.php?file=" + url,
    dataType: "json",
    ready: function(result) {
        func(result);
    }
});
}
getInfo(function(mp3info) {
    alert(mp3info.id3);
});
<?php
$info = array(); //The MP3 info array
echo json_encode($info, true);
?>
然后,您的PHP文件如下所示:

function getInfo(func) {
$.ajax({
    url: "mp3info.php?file=" + url,
    dataType: "json",
    ready: function(result) {
        func(result);
    }
});
}
getInfo(function(mp3info) {
    alert(mp3info.id3);
});
<?php
$info = array(); //The MP3 info array
echo json_encode($info, true);
?>


谢谢,我发现:如果您的服务器使用Python,看起来不错。我在看一些最近的HTML5API,看看它们支持什么。但是到目前为止,所有的部分文件访问都只针对客户端文件,所以这对您没有帮助。ID3v1总是在最后256(或者是512?)字节。因此,单个范围的HTTP请求就可以了。+1用于更新
范围
头。我使用它来支持探索.zip的内容,它的结尾告诉您在哪里查找目录信息。这意味着我可以构建一个基于浏览器的用户界面来探索超大拉链,而无需下载整个拉链。是的,我对我可以很容易地在请求范围内走多远印象深刻。我最初研究了HTML5家族中的文件API。但答案似乎再一次出现在好的旧HTTP中——如果我见过的话,这是一个令人印象深刻的规范。别忘了编写自己的函数来获取MP3信息。在我的Javascript示例中,信息数组中必须有一个id3键。