【发布时间】:2012-11-22 04:19:04
【问题描述】:
我们实际上正在使用 javascript 开发远程音乐库管理器,我想知道是否有一种方法可以使用 js 下载 MP3 文件的最后 128 字节以获得其 ID3 标签。谢谢。
【问题讨论】:
标签: javascript html web-applications id3
我们实际上正在使用 javascript 开发远程音乐库管理器,我想知道是否有一种方法可以使用 js 下载 MP3 文件的最后 128 字节以获得其 ID3 标签。谢谢。
【问题讨论】:
标签: javascript html web-applications id3
您不能仅使用 JavaScript 来做到这一点。您需要服务器上的某些东西(这完全取决于您的服务器端技术)来读取文件的相关部分。然后在 JavaScript 中,您可以调用该服务器端部分。
HTTP 协议支持部分下载文件(就是这样)。但当然 HTTP 对 MP3 文件一无所知,因此您必须知道文件的哪个范围包含 JavaScript 中的 ID3 标记。
在纯 JavaScript 中仅下载一段 URL 似乎比我最初预期的更可行:
xhr = new XMLHttpRequest();
xhr.open("GET", "http://<your domain>/");
xhr.setRequestHeader("Range", "bytes=-256");
xhr.send();
这会请求远程文件的最后 256 个字节。
请注意,您的请求当然会受到通常的同源限制,因此您只能使用它从包含原始 HTML/JavaScript 的服务器中检索文件。
【讨论】:
Range 标头的更新。我用它来支持探索 .zip 的内容,它最后有一些东西告诉你在哪里寻找目录信息。这意味着我可以构建一个基于浏览器的 UI,用于在非常大的 zip 中进行探索,而无需下载整个 zip。
不使用服务器端编程语言:否。
您可以使用 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);
?>
【讨论】: