このトピックでは、Object Storage Service (OSS) SDK for Ruby in Railsアプリケーションを使用して、バケットの一覧表示、オブジェクトのアップロード、およびオブジェクトのダウンロードを行う方法について説明します。
準備
RailsアプリケーションでOSS SDK for Rubyを使用するには、次の依存関係をGemfile
に追加します。
gem 'aliyun-sdk', '~> 0.3.0
OSS SDK for Rubyを使用する場合、次の依存関係を追加します。
'aliyun/oss 'が必要です
レールとの統合
OSS SDK for RubyとRailsを統合するには、次の手順を実行します。
プロジェクトを作成します。
Railsをインストールし、oss-managerという名前のRailsアプリケーションを作成します。
gemインストールレール rails new oss-manager
説明この例では、oss-managerアプリケーションはOSSオブジェクトの管理ツールです。 すべてのバケットを一覧表示し、ディレクトリごとにバケット内のオブジェクトを一覧表示し、オブジェクトをアップロードし、オブジェクトをダウンロードできます。
gitを使用してプロジェクトコードを管理します。
cd oss-マネージャー git init git add. git commit -m "init project"
SDKの依存関係を追加します。
oss-manager/Gemfile
ファイルを変更して、依存関係を追加します。gem 'aliyun-sdk', '~> 0.3.0'
oss-manager/
でbundle install
コマンドを実行します。変更を保存します。
git add。 git commit -m「aliyun-sdk依存関係の追加」
OSSClientインスタンスの初期化
プロジェクトでOSSClientインスタンスを使用するたびに初期化を避けるため、プロジェクトに初期化ファイルを作成することを推奨します。
# oss-manager/config/initializers/aliyun_oss_init.rb
'aliyun/oss' が必要です
OSSモジュール
def self.client
@ client以外
Aliyun::Common::Logging.set_log_file('./log/oss_sdk.log')
@ client = Aliyun::OSS::Client.new ()
endpoint:
Rails.application.secrets.aliyun_oss['endpoint'] 、
access_key_id:
Rails.application.secrets.aliyun_oss['access_key_id '] 、
access_key_secret:
Rails.application.secrets.aliyun_oss['access_key_secret ']
)
end
@ client
終了
終了
上記のコードは、OSS SDK for Rubyのインストールパスのrails /ディレクトリに保存されています。 初期化後、プロジェクトでOSSClientインスタンスを使用できます。
buckets = OSS.client.list_buckets
エンドポイント、AccessKey ID、およびAccessKeyシークレットは、oss-manager/conf/secrets.yml
ファイルに格納されます。
開発:
secret_key_base: xxxx
aliyun_oss:
エンドポイント: xxxx
access_key_id: aaaa
access_key_secret: bbbb
変更を保存します。
git add。
git commit -m "add aliyun-sdk initializer"
すべてのバケットの一覧表示
次の手順を実行して、すべてのバケットを一覧表示できます。
Railsを使用して、バケットを管理するコントローラを生成します。
rails gコントローラバケットインデックス
oss-manager
ディレクトリに次のファイルを生成します。app/controller/buckets_controller.rb: バケットに関連する論理コードが含まれています。
app/views/buckets/index.html.erb: バケットに関連するコンテンツを表示するために使用されるコードが含まれています。
app/helpers/buckets_helper.rb: 補助関数を定義します。
buckets_controller.rbファイルを変更し、OSSClientインスタンスを呼び出して、
list_buckets
操作の結果を@ buckets
変数に保存します。クラスBucketsController < ApplicationController defインデックス @ buckets = OSS.client.list_buckets 終了 終了
views/buckets/index.html.erbファイルを変更して、バケットを一覧表示します。
<h1> バケット </h1> <table class="table table-striped"> <tr> <th> 名前 </th> <th> 場所 </th> <th>CreationTime</th> </tr> <% @ buckets.each do | bucket | %> <tr> <td ><%= link_to bucket.name, bucket_objects_path(bucket.name) %></td> <td ><%= bucket.location %></td> <td ><%= bucket.creation_time.localtime.to_s %></td> </tr> <% end %> </table>
app/helpers/buckets_helper.rbファイルで
bucket_objects_path
補助関数を定義します。モジュールBucketsHelper def bucket_objects_path(bucket_name) "/buckets/#{bucket_name}/objects" 終了 終了
上記の手順を完了すると、すべてのバケットを一覧表示できます。
また、ブラウザに入力したアドレスが正しいロジックを使用できるように、Railsのルーティングを設定する必要があります。
config/routes.rb
ファイルを変更し、次の内容を追加します。リソース: バケットは リソース: オブジェクト 終了
oss-manager/
でrails
を実行してRailsサーバーを起動し、ブラウザでhttp:// localhost:3000/buckets/
と入力してバケットリストを表示します。変更を保存します。
git add。 git commit -m「リストバケットの追加機能」
バケット内のすべてのオブジェクトをディレクトリで一覧表示する
次の手順を実行して、バケット内のすべてのオブジェクトをディレクトリごとに一覧表示できます。
オブジェクトを管理するコントローラを生成します。
rails gコントローラオブジェクトのインデックス
app/controllers/objects_controller.rbファイルを変更します。
クラスObjectsController < ApplicationController defインデックス @ bucket_name = params[:bucket_id] @ prefix = params[:prefix] @ bucket = OSS.client.get_bucket(@ bucket_name) @ objects = @ bucket.list_objects(:prefix => @ prefix, :delimiter => '/') 終了 終了
URLのパラメーターからバケット名を取得できます。 ディレクトリごとにオブジェクトを一覧表示するプレフィックスを追加し、OSSClientインスタンスのlist_object操作を呼び出してオブジェクトリストを取得します。
説明この例では、指定されたプレフィックスと区切り文字としてスラッシュ (/) を含む名前のオブジェクトが取得されます。 詳細については、「概要」をご参照ください。
app/views/objects/index.html.erbファイルを変更します。
<h1> <%= @ bucket_name %></h1> のオブジェクト <p> <%= link_to 'Upload file' 、new_object_path(@ bucket_name、@ prefix) %></p> <table class="table table-striped"> <tr> <th> キー </th> <th> タイプ </th> <th> サイズ </th> <th>LastModified</th> </tr> <tr> <td ><%= link_to '../', with_prefix(upper_dir(@ prefix)) %></td> <td> ディレクトリ </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> ディレクトリ </td> <td>N/A</td> <td>N/A</td> <% end %> </tr> <% end %> </table>
オブジェクトは、次のロジックに基づいてディレクトリごとにリストされます。
オブジェクト名の最初のスラッシュ (/) の前のコンテンツは、上位レベルのディレクトリと見なされます。
一般的なプレフィックスはディレクトリとしてリストされます。
オブジェクトはファイルとして表示されます。
上記のコードで使用されている補助関数 (
with_prefix
やremove_prefix
など) は、app/helpers/objects_helper.rbファイルで定義されています。モジュール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)}" 終了 終了
rails s
コマンドを実行し、ブラウザにhttp:// localhost:3000/buckets/my-bucket/objects/
と入力して、オブジェクトリストを表示します。変更を保存します。
git add。 git commit -m「リストオブジェクトの追加機能」
オブジェクトのダウンロード
前のセクションの手順では、URLがオブジェクトに追加されます。 オブジェクトのURLを使用して、オブジェクトをダウンロードできます。
<td ><%= link_to remove_prefix(object.key、@ prefix) 、
@ bucket.object_url(object.key) %></td>
bucket.object_url
を使用して、ダウンロードするオブジェクトの一時的なURLを生成することもできます。 詳細については、「概要」をご参照ください。
オブジェクトのアップロード
サーバー上のRailsアプリケーションでオブジェクトをアップロードするには、次の方法を使用できます。
通常のアップロードと同様の方法でオブジェクトをアップロードします。 Railsサーバーにオブジェクトをアップロードする必要があります。 その後、RailsサーバーはオブジェクトをOSSにアップロードします。
サーバーによって生成されたフォームと一時的な資格情報を使用してオブジェクトをアップロードします。
#new
メソッドをapp/controllers/objects_controller.rbファイルに追加して、アップロードフォームを生成します。def新しい @ bucket_name = params[:bucket_id] @ prefix = params[:prefix] @ bucket = OSS.client.get_bucket(@ bucket_name) @ options = { : prefix => @ prefix, : redirect => 'http:// localhost:3000 /バケット /' } 終了
app/views/objects/new.html.erbファイルを変更します。
<h2> オブジェクトのアップロード </h2> <%= upload_form(@ bucket、@ options) do %> <table class="table table-striped"> <tr> <td><label> バケット:</label></td> <td ><%= @ bucket.name %></td> </tr> <tr> <td><label> プレフィックス:</label></td> <td ><%= @ prefix %></td> </tr> <tr> <td><label> ファイルを選択:</label></td> <td><input type="file" name="file" style="display:inline" /></td> </tr> <tr> <td colspan="2"> <input type="submit" class="btn btn-default" value="Upload" /> <span>  </span> <%= link_to 'Back', objects_path(@ bucket_name, @ prefix) %> </td> </tr> </table> <% end %>
説明upload_form
は、OSS SDK for Rubyが提供する補助関数です。 アップロードフォームの生成に使用され、rails/aliyun_oss_helper.rbファイルで定義されます。 関数をapp/helpers /ディレクトリにコピーする必要があります。 次に、rails
コマンドを実行し、http:// localhost:3000/buckets/my-bucket/objects/new
にアクセスして、オブジェクトをOSSにアップロードできます。変更を保存します。
git add。 git commit -m「アップロードオブジェクト機能の追加」
スタイルを追加
Railsアプリケーションのインターフェイスにスタイルを追加するには、次の手順を実行します。
bootstrapをダウンロードします。 パッケージを解凍し、パッケージから抽出した
bootstrap.min.css
ファイルをapp/assets/stylesheets/
ディレクトリにコピーします。app/views/layouts/application.html.erb
ファイルを変更し、yield
行を次の内容に変更します。<div id="main"> <%= yield %> </div>
各ページのIDがメインである
<div>
タグを追加します。app/assets/stylesheets/application.css
ファイルを変更し、次のコンテンツを追加します。body { text-align: センター; } div#main { text-align: 左; 幅: 1024px; マージン: 0 auto; }
完全なデモコードについては、OSS Rails demoをご参照ください。