从Ruby和Rails中的url下载图像

时间:2014-08-31 13:25:44

标签: ruby-on-rails

我正在尝试从ruby和rails中的url下载图像,到目前为止我所做的是

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 个答案:

答案 0 :(得分: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) }