我想获取远程文件的内容类型,因为我在下载时遇到问题。内容类型错误。这是我下载文件的代码
url = "http://my_url/my_file.mp4"
file = open(URI::encode(url))
content_type = file.content_type # => text/plain instead of video/mpeg or video/mp4
我之前尝试了以下代码来获取content_type,但仍然不起作用:
url = URI.parse(url)
Net::HTTP.start(url.host, url.port){|http| http.head(url.request_uri)['Content-Type']}
有人有想法吗?
编辑
这是我用来找出它content_type的代码。
MIME::Types.type_for(URI::encode(url)).map{|type| type.content_type}.join(' ')
# => "application/mp4 audio/mp4 video/mp4 video/vnd.objectvideo"
但这是带有配乐的视频的结果。我怎么应该只粉红色的"视频/mp4"?我无法检查每种文件类型以查看结果是什么。这是无穷无尽的。
服务器没有义务告诉您正确的内容类型,在许多情况下,他们会弄错,因为它通常并不重要。大多数浏览器在接受和处理的内容方面提供了相当大的回旋余地。
确定的唯一方法是下拉文件并使用file
之类的工具来检查它。这有一个相当大的数据库,其中包含不同的文件格式和识别它们的方法。
请求的结果可能是 HTML 错误消息。在验证文件的内容之前,您不会知道。