【发布时间】:2016-11-14 21:04:51
【问题描述】:
我想获取一个远程文件的内容类型,因为我在下载它时遇到了问题。内容类型错误。这是我下载文件的代码
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”?我无法检查每种文件类型以查看结果。它是无止境的。
【问题讨论】:
-
你是想找出它是什么类型的文件,或者服务器返回的 Content-Type 标头的值是什么?
-
注意:一般最好写
URI.encode(...)。::命名空间导航器适用于模块、类和常量。 -
@Jordan 我想知道内容类型。基本上我想确定上传的文件是它应该是什么..根据这个内容类型我将实例化 X 或 Y 模型..
-
我刚刚测试了您的
open代码和您的Net::HTTP 代码,发现它们都报告了正确的Content-Type,即服务器返回的Content-Type 标头的值.这留下了一些可能性。其中: 1. 服务器没有返回文件,而是以纯文本形式返回错误信息(你看过响应的正文吗?); 2. 服务器没有返回文件,它返回的是其他一些纯文本文件;或 3. 服务器返回正确的文件,但 Content-Type 标头错误。我认为 1 和 3 最有可能。
标签: ruby file download content-type