2011-04-16 91 views
0

目前我使用系统命令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 

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

回答

1

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

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

至于更好的办法,wget的是相当久经考验所以没有什么错误使用它,因为这是它是专为。但是,您可以在同一时间将文件夹和文件名分配给它,而不是首先将其分配给它。

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

还请注意我使用执行的反引号方法,而不是system所以你不处理转义双引号。您也可以使用%x{wget ...}

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