尝试从绝对图像数组中读取和写入时,文件名太长

时间:2013-12-07 02:06:52

标签: ruby selenium-webdriver capybara-webkit

有一个水豚脚本,其中包括下载绝对图像链接。

尝试将这些图像写入磁盘时,我收到错误:

File name too long

输出还包括数组中所有图像URL的长列表。我认为gsub可以解决这个问题,但我不确定是哪一个或究竟如何实现它。

以下是一些示例图像网址,它们是链接数组的一部分。在这些示例中,合适的替代名称为g0377p-xl-3-24c1.jpgg0371b-m-4-6896.jpg

http://www.example.com/media/catalog/product/cache/1/image/560x560/ced77cb19565515451b3578a3bc0ea5e/g/0/g0377p-xl-3-24c1.jpg
http://www.example.com/media/catalog/product/cache/1/image/560x560/ced77cb19565515451b3578a3bc0ea5e/g/0/g0371b-m-4-6896.jpg

这是代码:

require "capybara/dsl"
require "spreadsheet"
require 'fileutils'
require 'open-uri'

   def initialize
     @excel = Spreadsheet::Workbook.new
     @work_list = @excel.create_worksheet
     @row = 0
   end

       imagelink = info.all("//*[@rel='lightbox[rotation]']")
       @work_list[@row, 6] = imagelink.map { |link| link['href'] }.join(', ')
       image = imagelink.map { |link| link['href'] }
       File.basename("#{image}", "w") do |f|
         f.write(open(image).read)
       end

2 个答案:

答案 0 :(得分:1)

您可以使用File.basename获取文件名:

uri = 'http://www.example.com/media/catalog/product/cache/1/image/560x560/ced77cb19565515451b3578a3bc0ea5e/g/0/g0377p-xl-3-24c1.jpg'
File.basename uri  #=> "g0377p-xl-3-24c1.jpg"

答案 1 :(得分:0)

创建文件名确实存在问题。

imagelink = info.all("//*[@rel='lightbox[rotation]']")

将返回一组节点。

从中您可以使用href获取map值并将结果数组保存在image中。

然后尝试使用该数组作为文件名。