2014-08-31 47 views
0

我想從Ruby和Rails URL下載圖像,到目前爲止我所做的是從下載網址圖像中Ruby和Rails

require 'base64' 
     parsedUri = URI.parse('http://somewebsite.com/path/to/image.jpeg') 
     http = Net::HTTP.new(parsedUri.host, parsedUri.port) 
     if params[:src].include? "https" 
      http.use_ssl = true 
     end 
     request = Net::HTTP::Get.new(parsedUri.request_uri, {'User-Agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0'}) 
     response = http.request(request) 
     image = Base64.encode64(response.body) 
     File.open('some.jpeg', "w+") do |f| 
      f.write(image) 
     end 

, 下面這段代碼確實讓文件在我根目錄,但當我打開它,它給了我錯誤「解釋JPEG圖像文件錯誤(不是JPEG文件:以0x64 0x61開頭)」諷刺的是,當我在gedit中打開該文件,並使用相同的base64編碼來渲染圖像瀏覽器使用img標籤。圖像被渲染。我正在使用Ubuntu。請幫助它驅使我堅果

+1

我看不到需要調用'Base.encode'。你沒有嘗試過嗎?只是'image = response.body'? – spickermann 2014-08-31 13:59:48

+0

@spickermann它的工作感謝 – 2014-09-01 07:41:01

回答

1

沒有必要爲Base64.encode64部分。我刪除了它,並重新編碼了一下:

uri = URI.parse('http://somewebsite.com/path/to/image.jpeg') 
http = Net::HTTP.new(uri.host, uri.port) 
http.use_ssl = params[:src].include?('https') 

response = http.request(
    Net::HTTP::Get.new(uri.request_uri, { 
    'User-Agent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0' 
    }) 
) 

File.open('some.jpeg', 'wb') { |f| f.write(response.body) } 
+0

真@spickermann說同樣的事情。此外,我需要將模式從'w +'更改爲'wb',因爲從ascii到utf-8的異常編碼錯誤 – 2014-09-01 12:30:31

+0

如果能解決您的問題,請您接受該答案。 Otherwiese它會留在未解決的問題清單。順便說一句:我是斯皮克曼... – spickermann 2014-09-01 22:03:42