试图从一组绝对图像中读取和写入时,文件名过长



拥有一个下载绝对图像链接的水豚脚本。

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

File name too long

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

以下是链接数组中的一些示例图像URL。在以下示例中,合适的替代名称为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

您可以使用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"

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

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

将返回一个节点数组。

从中可以使用map获得href值,并将生成的数组保存在image中。

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

最新更新