如何从rails控制台将图像从url保存到本地ubuntu文件夹?

我需要从一些网站编写图像解析器,它将获取图像,其他一些信息并保存到我的本地文件夹。 所以,假设我们在此url上有图片: https : //i.stack.imgur.com/MiqEv.jpg (这是某人的SO头像)

所以我想将它保存到本地文件夹。 让我们说"~/test/image.png"我找到了这个链接

我在我的终端尝试了这个:

 rails console require 'open-uri' open('~/test/image.jpg', 'wb') do |file| file << open('https://i.stack.imgur.com/MiqEv.jpg').read end 

如您所见,我的home / test文件夹为空 在此处输入图像描述

我从控制台#获得此输出 在此处输入图像描述

我该怎么办?

我也试过这个:

 require 'open-uri' download = open('https://i.stack.imgur.com/MiqEv.jpg') IO.copy_stream(download, '~/test/image.jpg') 

得到了这个输出:

=> #https://i.stack.imgur.com/MiqEv.jpg>,@ meta = {“date”=>“星期五,2016年5月6日11:58:05 GMT”,“content-type”=> “image / jpeg”,“content-length”=>“4276”,“connection”=>“keep-alive”,“set-cookie”=>“__ cfduid = d7f982c0742bf40e58d626659c65a88841462535885; expires = Sat,06-May-17 11 :58:05 GMT; path = /; domain = .imgur.com; HttpOnly“,”cache-control“=>”public,max-age = 315360000“,”etag“=>”\“b75caf18a116034fc3541978de7bac5b \”“, “expires”=>“星期一,5月4日2026 11:58:05 GMT”,“last-modified”=>“星期四,2013年3月28日15:05:35 GMT”,“x-amz-version-id”= >“TP7cpPcf0jWeW2t1gUz66VXYlevddAYh”,“cf-cache-status”=>“HIT”,“vary”=>“Accept-Encoding”,“server”=>“cloudflare-nginx”,“cf-ray”=>“29ec4221fdbf267e- FRA“},@ metas = {”date“=> [”星期五,2016年5月6日11:58:05 GMT“],”content-type“=> [”image / jpeg“],”content-length“= > [“4276”],“connection”=> [“keep-alive”],“set-cookie”=> [“__ cfduid = d7f982c0742bf40e58d626659c65a88841462535885; expires = Sat,06-May-17 11:58:05 GMT; path = /; domain = .imgur.com; HttpOnly“],”cache-control“=> [”public,max-ag e = 315360000“],”etag“=> [”\“b75caf18a116034fc3541978de7bac5b \”“],”expires“=> [”Mon,05 May 2026 11:58:05 GMT“],”last-modified“=> [ “星期四,2013年3月28日15:05:35 GMT”],“x-amz-version-id”=> [“TP7cpPcf0jWeW2t1gUz66VXYlevddAYh”],“cf-cache-status”=> [“HIT”],“变化” => [“Accept-Encoding”],“server”=> [“cloudflare-nginx”],“cf-ray”=> [“29ec4221fdbf267e-FRA”]},@ status = [“200”,“OK” ]> 2.3.0:244> IO.copy_stream(下载,’〜/ test / image.jpg’)=> 4276 在此处输入图像描述

但我的文件夹仍然是空的。 我该怎么办??

问题是文件没有被创建。 如果使用File.open创建文件或open然后执行`IO.copy_stream’它将起作用。

~/在ruby中不起作用。 您必须指定整个路径。

 require 'open-uri' download = open('http://sofzh.miximages.com/ruby-on-rails/MiqEv.jpg') open('/home/user/image.jpg', 'w') IO.copy_stream(download, '~/test/image.jpg') 

如果您还想创建目录,则必须使用Dir.mkdir 。 如果要创建嵌套目录,请使用FileUtils::mkdir_p 。 如果难以使用,我建议使用system 'mkdir dirname'system 'mkdir -p dir1/dir2/dir3'

 Dir.mkdir '/home/user/test' # doesnt work for nested folder creation require 'fileutils' FileUtils::mkdir_p '/home/user/test1/test2' # for nested system 'mkdir '~/test' # Unix command for directory creation system 'mkdir -p '~/test1/test2' # Unix command for nested directory 

希望这可以帮助

如果您使用的是Ubuntu,可以使用wget吗?

您可以同时使用wget 'http://sofzh.miximages.com/ruby-on-rails/MiqEv.jpg'system("wget 'http://sofzh.miximages.com/ruby-on-rails/MiqEv.jpg'") 。 或system("wget 'http://sofzh.miximages.com/ruby-on-rails/MiqEv.jpg' > /your/path

注意:对于第一个命令,您需要将命令包装到`符号中。 这将导致ruby调用系统命令。

另外,考虑使用/home/your_name而不仅仅是~ 。 还要注意前导/斜线。