新手问题 求教如何快速的得到文件流

fayake · 2015年09月28日 · 最后由 zlx_star 回复于 2015年09月28日 · 1790 次阅读

有一需求是得到网上图片的文件流 我使用了几种方法,可以得到但时间有点长 测试图片为http://a.hiphotos.baidu.com/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=1dc843d302087bf469e15fbb93ba3c49/6a63f6246b600c338719a2501a4c510fd8f9a1c1.jpg 一执行 100 次用时 8s

image = MiniMagick::Image.open(image_url)
image_path = image.path
io =File.open(image_path)

二 执行 100 次用时 3s

img_file = RestClient.get(image_url, user_agent: "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4")
      file_name = Time.now.to_i.to_s+"#{rand(1000)}"
      puts file_name
      path = File.join('/tmp', file_name)
      FileUtils.makedirs(path) unless Dir.exists?(path)
      file_path =File.join(path, file_name+".jpg")
      open(file_path, "wb") { |f| f.write(img_file) }

三 执行 100 次用时 4s

img = open(img_url,  "User-Agent"=> "Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4")
      file_path = "#{img.path}.#{img.content_type.split('/')[1]}"
      File.rename( img.path, file_path )

谁有更快的方法可以分享下, 我这几个方法会随图片大小增加而变的很长 90K 的图片需要 10s+

认证清楚烦请回复,谢谢!!

如果是单纯下载图片的话,可以采用异步 IO 的方式处理: concurrent-rubytyphoeus 均是很好的尝试

需要 登录 后方可回复, 如果你还没有账号请 注册新账号