Rails rails 中如何读取 url (目录) 下面的所有文件名

luckyyang · 2013年11月24日 · 最后由 luckyyang 回复于 2013年11月26日 · 4983 次阅读

比如说我想列出http://haoqicat.com/course_poster/目录下都有哪些文件。

找了半天也没找到合适的方法,大家有什么好方法。

@luckyyang, 使用 course_poster 目录的本地 path,通过 Find.find(path).to_a,你可以获取到所有文件对象的数组

#1 楼 @oldfritter 不是本地的啊,某个 url

#2 楼 @luckyyang 这个好像不行吧,又不是走 ftp 协议。除非是目录设置可列出文件列表,又没有默认文档,你才能看到的吧。

#3 楼 @xiaogui 我看有个说先 mount 然后在当作本地文件来读,不过我不想这么做。

使用 open-uri 中的 open 直接打开这个 url 可以得到一堆信息,不过不知道如何去解析,也不值得自己写函数去解析:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Index of /course_poster/default_poster</title>
</head>
<body>
<h1>Index of /course_poster/default_poster</h1>
<table><tr><th><img src="/icons/blank.gif" alt="[ICO]"></th><th><a href="?C=N;O=D">Name</a></th><th><a href="?C=M;O=A">Last modified</a></th><th><a href="?C=S;O=A">Size</a></th><th><a href="?C=D;O=A">Description</a></th></tr><tr><th colspan="5"><hr></th></tr>
<tr><td valign="top"><img src="/icons/back.gif" alt="[DIR]"></td><td><a href="/course_poster/">Parent Directory</a></td><td>&nbsp;</td><td align="right"> - </td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/image2.gif" alt="[IMG]"></td><td><a href="0.jpg">0.jpg</a></td><td align="right">24-Nov-2013 01:47 </td><td align="right">5.7M</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/image2.gif" alt="[IMG]"></td><td><a href="1.jpg">1.jpg</a></td><td align="right">24-Nov-2013 01:44 </td><td align="right">2.1M</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/image2.gif" alt="[IMG]"></td><td><a href="2.jpg">2.jpg</a></td><td align="right">24-Nov-2013 01:44 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/image2.gif" alt="[IMG]"></td><td><a href="3.jpg">3.jpg</a></td><td align="right">24-Nov-2013 01:45 </td><td align="right">1.0M</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/image2.gif" alt="[IMG]"></td><td><a href="4.jpg">4.jpg</a></td><td align="right">24-Nov-2013 01:43 </td><td align="right">2.1M</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/image2.gif" alt="[IMG]"></td><td><a href="5.jpg">5.jpg</a></td><td align="right">24-Nov-2013 01:45 </td><td align="right">1.4M</td><td>&nbsp;</td></tr>
<tr><td valign="top"><img src="/icons/image2.gif" alt="[IMG]"></td><td><a href="6.jpg">6.jpg</a></td><td align="right">24-Nov-2013 01:42 </td><td align="right">1.6M</td><td>&nbsp;</td></tr>
<tr><th colspan="5"><hr></th></tr>
</table>
</body></html>

如果实在没别的方法,就把这些文件放到我的public/下吧,这样使用Dir[http://haoqicat.com/course_poster/]就可以直接得到我想要的列表数组了

感觉你在四楼说的那种形式就像是我说的“除非是目录设置可列出文件列表,又没有默认文档,你才能看到的吧。”情况。就是你直接使用浏览器打开 url,那个页面显示的是一个当前文件夹的文件列表。

#6 楼 @xiaogui 哦 没错,是这样的。看来我只能放到 public 下面了

#7 楼 @luckyyang 其实有点想问你想“读取 url(目录)下面的所有文件名”的目的是什么?

#8 楼 @xiaogui 啊 我想给课程封面图片生成随机的图片 所以想先读取我指定的目录 然后创建课程的时候随机选择一个图片作为封面

不知道我说明白了没有

能否先下载到本地临时目录,操作完毕后再删除

#10 楼 @pobing 那还不如使用 mount 的方式吧?

#4 楼 @luckyyang 照你这个页面的话可以这么做

  1. 读取http://haoqicat.com/course_poster/ 内容
  2. 使用正则或者 nokogiri 来解析 a href 里面的内容
# encoding: utf-8
require "open-uri"
require "nokogiri"

doc = Nokogiri::HTML.parse open("http://localhost")

p doc.css('td a').map { |link| link['href'] }
需要 登录 后方可回复, 如果你还没有账号请 注册新账号