从rails上的ruby中的URL下载视频

时间:2011-04-16 04:37:32

标签: ruby-on-rails ruby wget

目前我正在使用系统命令wget下载视频并存储在我们的服务器中:

system("cd #{RAILS_ROOT}/public/users/familyvideos/thumbs && wget -O sxyz1.mp4 #{video.download_url}")

但它说:

cd: 1: can't cd to /var/home/web/***.com/public/users/familyvideos/thumbs

有人有任何想法吗?另外,请提供替代选项来执行此操作。

2 个答案:

答案 0 :(得分:2)

更好的解决方案是使用open-uri。

http://www.ruby-doc.org/stdlib/libdoc/open-uri/rdoc/

这个片段应该可以解决问题:

url = video.download_url
new_file_path = "#{Rails.root.to_s}/public/users/familyvideos/thumbs/your_video.mp4"
open(new_file_path, "wb") do |file| 
  file.print open(url).read
end

答案 1 :(得分:1)

这是cd程序抱怨,这是低级操作系统的东西,所以最可能的原因是#{RAILS_ROOT}/public之后的一个或多个文件夹尚不存在,或者有一个文件路径中的空格或其他字符导致问题。尝试用引号括起目录名称。

`cd "#{RAILS_ROOT}/public/users/familyvideos/thumbs" && wget -O sxyz1.mp4 #{video.download_url}`

至于更好的方法,wget经过了相当的尝试和测试,因此使用它没有任何问题,因为这是它的设计目的。你可以在同一时间给它文件夹和文件名,而不是先给它做cd'ing。但是。

`wget -O "#{RAILS_ROOT}/public/users/familyvideos/thumbs/sxyz1.mp4" #{video.download_url}`

另请注意,我正在使用反引号执行方法而不是system,因此您不会处理转义双引号。您也可以使用%x{wget ...}