目前我正在使用系统命令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
有人有任何想法吗?另外,请提供替代选项来执行此操作。
答案 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 ...}
。