2016-05-06 44 views
0

我需要從某些網站編寫圖像解析器,它將拍攝圖像,一些其他信息並將其保存到我的本地文件夾。 所以我們可以說,我們在這個網址有圖片: https://i.stack.imgur.com/MiqEv.jpg (這是誰家的SO頭像)如何將圖像從網址保存到本地ubuntu文件夾從軌道控制檯?

所以我想將其保存到本地文件夾。比方說,以"~/test/image.png" 我發現這個link

而且我在終端試過這樣:

rails console 

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

正如你可以看到我的家/ test文件夾爲空 enter image description here

而且我得到了這個輸出from console #<File:~/test/image.jpg (closed)>enter image description here

我該怎麼辦?

而且我想這:

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>,@元= {「date」=>「Fri,06 May 2016 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「=>」Mon,04 May 2026 11:58 :05 GMT「,」last-modified「=>」Thu,28 Mar 2013 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 「=」[「Fri,06 May 2016 11:58:05 GMT」], 「content-type」=> [「image/jpeg」],「content-length」=> [「4276」], 「連接「=> [」keep-alive「], 」set-cookie「=> [」__ cfduid = d7f982c0742bf40e58d626659c65a88841462535885; expires =星期六,06五月-17:11:58:05 GMT;路徑= /;域= .imgur.com; HttpOnly「],」cache-control「=> [」public,max-age = 315360000「], 」etag「=> [」\「b75caf18a116034fc3541978de7bac5b \」「],」expires「=> [」Mon,04 May 2026 11:58:05 GMT「],」last-modified「=> [」Thu,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「]}, @status = [」200「,」OK「]> 2.3.0:244> IO.copy_stream(download,'〜/ test/image.jpg')= > 4276 enter image description here

但我的文件夾是st生病了。 我該怎麼辦?

+0

我不知道它是否適合您的用例,但carrierwave gem使用戶非常容易(例如,如果您希望用戶上傳他們的頭像)。 https://github.com/carrierwaveuploader/carrierwave#uploading-files-from-a-remote-location – Matt

+0

@Matt我根本沒有任何用戶。 =)我正在寫一個圖像解析器 – user2950593

+0

嘗試用'/ home/yourusername /'替換'〜'\ –

回答

1

問題是文件沒有被創建。如果您使用File.openopen創建文件,然後執行`IO.copy_stream',它將起作用。

另外~/不工作在紅寶石。你必須指定整個路徑。

require 'open-uri' 
download = open('https://i.stack.imgur.com/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幫助

0

,可你只需要使用wget?可以使用wget 'https://i.stack.imgur.com/MiqEv.jpg'system("wget 'https://i.stack.imgur.com/MiqEv.jpg'")。或者system("wget 'https://i.stack.imgur.com/MiqEv.jpg' > /your/path

注意:對於第一個命令,你需要將你的命令包裝到`signs中。這將導致ruby調用系統命令。

另外,考慮使用/home/your_name而不是僅僅使用~。還請注意領先的/斜槓。

相關問題