如何从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
而不仅仅是~
。 还要注意前导/
斜线。