すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:RailsアプリケーションでRubyのOSS SDKを使用する

最終更新日:Dec 20, 2023

このトピックでは、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を統合するには、次の手順を実行します。

  1. プロジェクトを作成します。

    1. Railsをインストールし、oss-managerという名前のRailsアプリケーションを作成します。

      gemインストールレール
      rails new oss-manager
                                  
      説明

      この例では、oss-managerアプリケーションはOSSオブジェクトの管理ツールです。 すべてのバケットを一覧表示し、ディレクトリごとにバケット内のオブジェクトを一覧表示し、オブジェクトをアップロードし、オブジェクトをダウンロードできます。

    2. gitを使用してプロジェクトコードを管理します。

      cd oss-マネージャー
      git init
      git add.
      git commit -m "init project"
                                  
  2. SDKの依存関係を追加します。

    1. oss-manager/Gemfileファイルを変更して、依存関係を追加します。

      gem 'aliyun-sdk', '~> 0.3.0'
                                  
    2. oss-manager/bundle installコマンドを実行します。

    3. 変更を保存します。

      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" 

すべてのバケットの一覧表示

次の手順を実行して、すべてのバケットを一覧表示できます。

  1. Railsを使用して、バケットを管理するコントローラを生成します。

    rails gコントローラバケットインデックス
                        
  2. oss-managerディレクトリに次のファイルを生成します。

    • app/controller/buckets_controller.rb: バケットに関連する論理コードが含まれています。

    • app/views/buckets/index.html.erb: バケットに関連するコンテンツを表示するために使用されるコードが含まれています。

    • app/helpers/buckets_helper.rb: 補助関数を定義します。

  3. buckets_controller.rbファイルを変更し、OSSClientインスタンスを呼び出して、list_buckets操作の結果を @ buckets変数に保存します。

    クラスBucketsController < ApplicationController
      defインデックス
        @ buckets = OSS.client.list_buckets
      終了
    終了 
  4. 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>
                        
  5. 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/ と入力してバケットリストを表示します。

  6. 変更を保存します。

    git add。
    git commit -m「リストバケットの追加機能」
                        

バケット内のすべてのオブジェクトをディレクトリで一覧表示する

次の手順を実行して、バケット内のすべてのオブジェクトをディレクトリごとに一覧表示できます。

  1. オブジェクトを管理するコントローラを生成します。

    rails gコントローラオブジェクトのインデックス
                        
  2. 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操作を呼び出してオブジェクトリストを取得します。

    説明

    この例では、指定されたプレフィックスと区切り文字としてスラッシュ (/) を含む名前のオブジェクトが取得されます。 詳細については、「概要」をご参照ください。

  3. 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>
                        

    オブジェクトは、次のロジックに基づいてディレクトリごとにリストされます。

    1. オブジェクト名の最初のスラッシュ (/) の前のコンテンツは、上位レベルのディレクトリと見なされます。

    2. 一般的なプレフィックスはディレクトリとしてリストされます。

    3. オブジェクトはファイルとして表示されます。

    上記のコードで使用されている補助関数 (with_prefixremove_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)}"
      終了
    終了
                        
  4. rails sコマンドを実行し、ブラウザにhttp:// localhost:3000/buckets/my-bucket/objects/ と入力して、オブジェクトリストを表示します。

  5. 変更を保存します。

    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にアップロードします。

  • サーバーによって生成されたフォームと一時的な資格情報を使用してオブジェクトをアップロードします。

    1. #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 /バケット /'
        }
      終了
                                      
    2. 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>&nbsp;&nbsp</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にアップロードできます。

    3. 変更を保存します。

      git add。
      git commit -m「アップロードオブジェクト機能の追加」 

スタイルを追加

Railsアプリケーションのインターフェイスにスタイルを追加するには、次の手順を実行します。

  1. bootstrapをダウンロードします。 パッケージを解凍し、パッケージから抽出したbootstrap.min.cssファイルをapp/assets/stylesheets/ ディレクトリにコピーします。

  2. app/views/layouts/application.html.erbファイルを変更し、yield行を次の内容に変更します。

    <div id="main">
        <%= yield %>
      </div>
                            
  3. 各ページのIDがメインである <div> タグを追加します。 app/assets/stylesheets/application.cssファイルを変更し、次のコンテンツを追加します。

    body {
        text-align: センター;
    }
    
    div#main {
        text-align: 左;
        幅: 1024px;
        マージン: 0 auto;
    }
                            

完全なデモコードについては、OSS Rails demoをご参照ください。