All Products
Search
Document Center

Object Storage Service:Aplikasi Rails (Ruby SDK)

Last Updated:Nov 30, 2025

Topik ini menjelaskan cara menggunakan Object Storage Service (OSS) SDK untuk Ruby di aplikasi Rails untuk mencantumkan bucket, mengunggah objek, dan mengunduh objek.

Persiapan

Untuk menggunakan OSS SDK untuk Ruby dalam aplikasi Rails, tambahkan dependensi berikut ke file Gemfile.

gem 'aliyun-sdk', '~> 0.3.0
            

Tambahkan dependensi berikut ketika Anda menggunakan OSS SDK untuk Ruby:

require 'aliyun/oss'
            

Integrasi dengan Rails

Anda dapat melakukan langkah-langkah berikut untuk mengintegrasikan OSS SDK untuk Ruby dengan Rails:

  1. Buat sebuah proyek.

    1. Instal Rails dan buat aplikasi Rails bernama oss-manager.

      gem install rails
      rails new oss-manager
                                  
      Catatan

      Dalam contoh ini, aplikasi oss-manager adalah alat manajemen untuk objek OSS. Aplikasi ini dapat mencantumkan semua bucket, mencantumkan objek dalam bucket berdasarkan direktori, mengunggah objek, dan mengunduh objek.

    2. Gunakan git untuk mengelola kode proyek.

      cd oss-manager
      git init
      git add .
      git commit -m "init project"
                                  
  2. Tambahkan dependensi SDK.

    1. Edit oss-manager/Gemfile untuk menambahkan dependensi SDK.

      gem 'aliyun-sdk', '~> 0.3.0'
                                  
    2. Di direktori oss-manager/, jalankan bundle install.

    3. Simpan perubahan.

      git add .
      git commit -m "add aliyun-sdk dependency"
                                  

Inisialisasi instance OSSClient

Untuk menghindari inisialisasi setiap kali Anda menggunakan instance OSSClient dalam proyek, kami sarankan Anda membuat file inisialisasi di proyek.

# oss-manager/config/initializers/aliyun_oss_init.rb
require 'aliyun/oss'

module OSS
  def self.client
    unless @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
  end
end            

Kode sebelumnya disimpan di direktori rails/ dari jalur instalasi OSS SDK untuk Ruby. Anda dapat menggunakan instance OSSClient dalam proyek setelah inisialisasi.

buckets = OSS.client.list_buckets            

Nilai endpoint, access_key_id, dan access_key_secret disimpan dalam file oss-manager/conf/secrets.yml.

development:
  secret_key_base: xxxx
  aliyun_oss:
    endpoint: xxxx
    access_key_id: aaaa
    access_key_secret: bbbb           

Simpan perubahan.

git add .
git commit -m "add aliyun-sdk initializer"            

Cantumkan semua bucket

Anda dapat melakukan langkah-langkah berikut untuk mencantumkan semua bucket:

  1. Gunakan Rails untuk menghasilkan pengontrol untuk mengelola bucket.

    rails g controller buckets index
                        
  2. File-file berikut dihasilkan dalam folder oss-manager:

    • app/controller/buckets_controller.rb: berisi kode logis terkait bucket.

    • app/views/buckets/index.html.erb: berisi kode yang digunakan untuk menampilkan konten terkait bucket.

    • app/helpers/buckets_helper.rb: mendefinisikan fungsi pembantu.

  3. Edit `buckets_controller.rb`. Panggil client OSS dan simpan hasil operasi list_buckets ke variabel @buckets.

    class BucketsController < ApplicationController
      def index
        @buckets = OSS.client.list_buckets
      end
    end
  4. Ubah file views/buckets/index.html.erb untuk mencantumkan bucket.

    <h1>Buckets</h1>
    <table class="table table-striped">
      <tr>
        <th>Name</th>
        <th>Location</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. Dalam `app/helpers/buckets_helper.rb`, definisikan fungsi pembantu bucket_objects_path.

    module BucketsHelper
      def bucket_objects_path(bucket_name)
        "/buckets/#{bucket_name}/objects"
      end
    end
                        

    Setelah Anda menyelesaikan langkah-langkah sebelumnya, Anda dapat mencantumkan semua bucket.

    Anda juga perlu mengonfigurasi routing Rails agar alamat yang dimasukkan di browser memanggil logika yang sesuai. Edit config/routes.rb dan tambahkan konten berikut.

    resources :buckets do
      resources :objects
    end
                        

    Di direktori oss-manager/, jalankan rails s untuk memulai server Rails. Lalu, buka http://localhost:3000/buckets/ di browser untuk melihat daftar bucket.

  6. Simpan perubahan.

    git add .
    git commit -m "add list buckets feature"
                        

Cantumkan semua objek dalam bucket berdasarkan direktori

Anda dapat melakukan langkah-langkah berikut untuk mencantumkan semua objek dalam bucket berdasarkan direktori:

  1. Hasilkan pengontrol untuk mengelola objek.

    rails g controller objects index
                        
  2. Ubah file 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
                        

    Anda dapat memperoleh nama bucket dari parameter di URL. Tambahkan awalan untuk mencantumkan objek berdasarkan direktori dan panggil operasi list_object dari instance OSSClient untuk mendapatkan daftar objek.

    Catatan

    Dalam contoh ini, objek yang namanya berisi awalan tertentu dan garis miring (/) sebagai pemisah diperoleh. Untuk informasi lebih lanjut, lihat Ikhtisar.

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

    Objek dicantumkan berdasarkan direktori sesuai dengan logika berikut:

    1. '../' selalu merujuk ke direktori induk.

    2. Awalan umum dicantumkan sebagai direktori.

    3. Objek ditampilkan sebagai file.

    Kode di atas menggunakan fungsi pembantu seperti with_prefix dan remove_prefix, yang didefinisikan dalam `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
                        
  4. Setelah selesai, jalankan rails s. Lalu, buka http://localhost:3000/buckets/my-bucket/objects/ di browser untuk melihat daftar file.

  5. Simpan perubahan.

    git add .
    git commit -m "add list objects feature"                    

Unduh objek

Dalam langkah-langkah di bagian sebelumnya, URL ditambahkan ke objek. Anda dapat menggunakan URL objek untuk mengunduh objek.

<td><%= link_to remove_prefix(object.key, @prefix),
        @bucket.object_url(object.key) %></td>               

Anda juga dapat menggunakan bucket.object_url untuk menghasilkan URL sementara bagi file. Untuk informasi selengkapnya, lihat Download files.

Unggah objek

Untuk mengunggah objek di aplikasi Rails di server, Anda dapat menggunakan metode berikut:

  • Unggah objek dengan cara yang mirip dengan unggahan normal. Anda perlu mengunggah objek ke server Rails. Lalu, server Rails mengunggah objek ke OSS.

  • Unggah objek menggunakan form dan kredensial sementara yang dihasilkan oleh server.

    1. Dalam `app/controllers/objects_controller.rb`, tambahkan metode #new untuk menghasilkan form unggah.

      def new
        @bucket_name = params[:bucket_id]
        @prefix = params[:prefix]
        @bucket = OSS.client.get_bucket(@bucket_name)
        @options = {
          :prefix => @prefix,
          :redirect => 'http://localhost:3000/buckets/'
        }
      end
                                      
    2. Ubah file app/views/objects/new.html.erb.

      <h2>Upload object</h2>
      
      <%= upload_form(@bucket, @options) do %>
        <table class="table table-striped">
          <tr>
            <td><label>Bucket:</label></td>
            <td><%= @bucket.name  %></td>
          </tr>
          <tr>
            <td><label>Prefix:</label></td>
            <td><%= @prefix  %></td>
          </tr>
      
          <tr>
            <td><label>Select file:</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" />
              &nbsp;&nbsp
      Catatan

      upload_form adalah fungsi pembantu yang disediakan oleh SDK untuk menghasilkan form unggah secara mudah. Fungsi ini tersedia di `rails/aliyun_oss_helper.rb`. Salin file tersebut ke direktori `app/helpers/`. Setelah itu, jalankan rails s dan buka http://localhost:3000/buckets/my-bucket/objects/new untuk mengunggah file ke OSS.

    3. Simpan perubahan.

      git add .
      git commit -m "add upload object feature"                               

Tambahkan gaya

Anda dapat melakukan langkah-langkah berikut untuk menambahkan gaya ke antarmuka aplikasi Rails:

  1. Unduh Bootstrap. Setelah mengekstrak paketnya, salin file bootstrap.min.css ke direktori app/assets/stylesheets/.

  2. Ubah app/views/layouts/application.html.erb dan ganti baris yield dengan kode berikut.

      <div id="main">
        <%= yield %>
      </div>
                            
  3. Untuk setiap halaman, tambahkan elemen <div> dengan ID `main`. Lalu, ubah app/assets/stylesheets/application.css dan tambahkan konten berikut.

    body {
        text-align: center;
    }
    
    div#main {
        text-align: left;
        width: 1024px;
        margin: 0 auto;
    }
                            

Untuk kode demo lengkap, kunjungi OSS Rails Demo.