远程文件的内容类型

时间:2016-07-12 14:39:22

标签: ruby file download content-type

我想获取远程文件的内容类型,因为我下载时遇到问题。内容类型错误。这是我下载文件的代码

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"

但是这里的结果是带有音轨的视频..我怎么想只粉红色的“video / mp4”?我无法检查每个文件类型以查看结果是什么..它是无止境的。

1 个答案:

答案 0 :(得分:1)

服务器没有义务告诉您正确的内容类型,在许多情况下,它们会弄错,因为它通常不重要。大多数浏览器都会为他们接受和处理的内容提供相当大的余地。

唯一可以确定的方法是下拉文件并使用file之类的工具进行检查。它有一个相当大的不同文件格式的数据库以及识别它们的方法。

您的请求结果可能是HTML错误消息。在验证文件内容之前,您不会知道。