详细解答可以参考官方帮助文档
首先生成一个管理Objects的controller:
rails g controller objects index
然后编辑app/controllers/objects_controller.rb:
class ObjectsController < ApplicationController
def index
@bucket_name = params[:bucket_id]
@prefix = params[:prefix]
@bucket = OSS.client.get_bucket(@bucket_name)
@objects = @bucket.list_objects(:prefix => @prefix, :delimiter => '/')
end
end
上面的代码首先从URL的参数中获取Bucket名字,为了只按目录层级显示,我们还需要一个前缀。然后调用OSS Client的list_objects接口获取文件列表。注意,这里获取的是指定前缀下,并且以’/‘为分界的文件。这样做是为也按目录层级列出文件。请参考管理文件
接下来编辑app/views/objects/index.html.erb:
<h1>Objects in <%= @bucket_name %></h1>
<p> <%= link_to 'Upload file', new_object_path(@bucket_name, @prefix) %></p>
<table class="table table-striped">
<tr>
<th>Key</th>
<th>Type</th>
<th>Size</th>
<th>LastModified</th>
</tr>
<tr>
<td><%= link_to '../', with_prefix(upper_dir(@prefix)) %></td>
<td>Directory</td>
<td>N/A</td>
<td>N/A</td>
</tr>
<% @objects.each do |object| %>
<tr>
<% if object.is_a?(Aliyun::OSS::Object) %>
<td><%= link_to remove_prefix(object.key, @prefix),
@bucket.object_url(object.key) %></td>
<td><%= object.type %></td>
<td><%= number_to_human_size(object.size) %></td>
<td><%= object.last_modified.localtime.to_s %></td>
<% else %>
<td><%= link_to remove_prefix(object, @prefix), with_prefix(object) %></td>
<td>Directory</td>
<td>N/A</td>
<td>N/A</td>
<% end %>
</tr>
<% end %>
</table>
上面的代码将文件按目录结构显示,主要逻辑是:
上面的代码中用到了with_prefix
, remove_prefix
等一些辅助函数,它们定义在app/helpers/objects_helper.rb中:
module ObjectsHelper
def with_prefix(prefix)
"?prefix=#{prefix}"
end
def remove_prefix(key, prefix)
key.sub(/^#{prefix}/, '')
end
def upper_dir(dir)
dir.sub(/[^\/]+\/$/, '') if dir
end
def new_object_path(bucket_name, prefix = nil)
"/buckets/#{bucket_name}/objects/new/#{with_prefix(prefix)}"
end
def objects_path(bucket_name, prefix = nil)
"/buckets/#{bucket_name}/objects/#{with_prefix(prefix)}"
end
end
完成之后运行rails s
,然后在浏览器中输入地址http://localhost:3000/buckets/my-bucket/objects/
就可以查看文件列表了。
惯例保存代码:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。