1

我有这个代码来保存用 nokogiri 和机械化刮擦的图像:

img_url = agent.page.at(".field-content a")[:href]
root_img_url = URI.join(page_url,img_url).to_s
cover = File.basename(URI.decode(root_img_url))

file = File.open(File.join(Rails.root, 'app', 'assets', 'images', cover), 'wb') { |f|
  f.write(open(root_img_url).read)
}

Book.create(
  :cover => cover
)

在我看来,我有:

<%= image_tag book.cover %>

我的问题是某些文件名最终看起来像这样Books'25 b&w_chap 01_.jpg而我的视图无法显示它们。

我可以做些什么来阅读这些文件并在我的视图中显示?

更新

现在工作添加downcase和gsub,如:

cover = File.basename(URI.decode(root_img_url)).downcase.gsub(/[^\w.jpg]/,"")

这修复了像books25bw_chap01_.jpg这样的文件名

有了这个,下一步是实现 File.rename。

谢谢你的时间。

4

1 回答 1

1

这个问题可能有两个原因:

  1. 您只是文件名格式(使用 Sring )有问题。您可以使用一些 String 类方法并将 file_name 更改为所需的格式。或者它可能是 \' 符号的问题。

  2. 编码问题。使用 UTF-8 编码不会有问题。

正确的文件名:

  • 英文字母
  • 没有空间
  • 没有像 \'、\"、\: 和类似的邪恶符号。

正确的方法是将“Books'25 b&w_chap 01_.jpg”重命名为“books_25_b_w_chap_01.jpg”,当用户在服务器上上传图片或解析图片后。或者给图片一些合乎逻辑的人类可以理解的名字。

于 2013-08-09T08:35:44.640 回答