简短回答:是的,如果它们是 ID3v2 标签
您要阅读哪个 ID3 Tag 版本?
ID3v1 标签位于文件末尾,在最后 128 个字节中。使用 Net::HTTP 似乎无法向前搜索文件末尾并仅读取最后 N 个字节。如果您尝试使用 headers = {"Range" => "bytes=128-"} ,它似乎总是下载完整的文件。resp.body.size => 文件大小。但没有大的损失,因为 ID3 版本 1 在这一点上已经过时了,因为它的限制,例如固定长度格式,只有 ASCII 文本,...)。iTunes 使用 ID3 版本 2.2.0。
ID3v2 标签位于文件的开头 - 以支持流式传输 - 您可以通过 HTTP 协议 >= 1.1 下载包含 ID3v2 标头的 MP3 文件的初始部分
我之前回答了几乎相同的问题,这是专门针对 Ruby 实现的。
请检查这个问题:
Read ID3 Tags of Remote MP3 File in Ruby/Rails?
继续..
我提到的另一个问题中的 Ruby 代码是一个功能齐全的示例。
您可以设置要获取的字节的预定大小,该大小足够大,以至于您假设它包含完整的 ID3 标记,例如 1000 字节
然后,您使用您喜欢的 HTTP 库为您使用的任何语言打开一个 HTTP 连接,但请确保 HTTP 协议的版本是 >= 1.1 ,并且您使用 HTTP 选项 "Range" 读取前 1000 字节,这仅从您尝试通过 HTTP 访问的文件中下载给定范围的字节。
iOS 上的具体实现取决于您使用的库。
下面是一个在 Objective-C 中的 GET 请求示例:
Simple objective-c GET request
您需要做的就是将 Range-header 传递给指定范围的请求。
请参阅 API:https ://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableURLRequest_Class/Reference/Reference.html
还要检查 Range 标头字段需要如何格式化的示例:
http://en.wikipedia.org/wiki/List_of_HTTP_header_fields
例如,这是 Range 标头的语法:
Range: bytes=0-1000
您需要通过 addValue:forHTTPHeaderField 实例方法设置此标头。