• RoR Resume Uploader App
    • 1. 前提条件
    • 2. 依赖
    • 3. 安装
    • 4. 设置存储桶
    • 5. 配置AWS SDK连接Minio Server
    • 6. 上传对象
    • 7. 创建Views
    • 8. 运行App
    • 9. Explore Further

    RoR Resume Uploader App

    minio_ROR1

    本示例将会指导你使用Ruby on Rails和Minio Server构建一个简单的app。我们将学习如何在我们的rails app中使用aws-sdk上传对象到一个Minio Server上。你可以通过这里获取完整的代码,代码是以Apache 2.0 License发布的。

    1. 前提条件

    • 从这里下载并安装mc。
    • 从这里下载并安装Minio Server。
    • ruby 2.0。
    • rails 4.0。

      2. 依赖

    • aws-sdk v2.0 gem

      3. 安装

    按下面所示获取代码,并调用bundle install。

    1. git clone https://github.com/minio/ror-resumeuploader-app
    2. cd ror-resumeuploader-app
    3. bundle install

    除了rails应用需要的的所有的标准gem外,添加一个aws-sdk v2 gem到Gemfile中。

    1. source 'https://rubygems.org'
    2. # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
    3. gem 'rails', '4.2.4'
    4. # Use sqlite3 as the database for Active Record
    5. gem 'sqlite3'
    6. # Use SCSS for stylesheets
    7. gem 'sass-rails', '~> 5.0'
    8. # Use Uglifier as compressor for JavaScript assets
    9. gem 'uglifier', '>= 1.3.0'
    10. # Use CoffeeScript for .coffee assets and views
    11. gem 'coffee-rails', '~> 4.1.0'
    12. # See https://github.com/rails/execjs#readme for more supported runtimes
    13. # gem 'therubyracer', platforms: :ruby
    14. # Use jquery as the JavaScript library
    15. gem 'jquery-rails'
    16. # Turbolinks makes following links in your web application faster. Read more: https://github.com/rails/turbolinks
    17. gem 'turbolinks'
    18. # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
    19. gem 'jbuilder', '~> 2.0'
    20. # bundle exec rake doc:rails generates the API under doc/api.
    21. gem 'sdoc', '~> 0.4.0', group: :doc
    22. group :development, :test do
    23. # Call 'byebug' anywhere in the code to stop execution and get a debugger console
    24. gem 'byebug'
    25. end
    26. group :development do
    27. # Access an IRB console on exception pages or by using <%= console %> in views
    28. gem 'web-console', '~> 2.0'
    29. # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
    30. gem 'spring'
    31. end
    32. # Add the aws sdk gem
    33. gem 'aws-sdk', '~> 2'

    注意: 如果是在Ubuntu上运行这个示例,请添加therubyracer gem。

    4. 设置存储桶

    我们已经创建了一个公开的Minio Server(https://play.minio.io:9000) 供大家进行开发和测试。Minio Client mc已经预设好和play server的配置。调用mc mb命令,在play.minio.io:9000上创建一个名叫resumes的存储桶。

    1. mc mb play/resumes

    5. 配置AWS SDK连接Minio Server

    添加一个名叫aws.rb的初始化文件,并按下面所示设置好连接Minio Server的认证信息。在本示例中我们使用的是Minio的公开服务https://play.minio.io:9000 ,你也可以改成你自己的。

    1. Aws.config.update(
    2. region: 'us-east-1',
    3. endpoint: "https://play.minio.io:9000",
    4. force_path_style: true,
    5. credentials: Aws::Credentials.new(
    6. "Q3AM3UQ867SPQQA43P2F",
    7. "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG"
    8. )
    9. )

    注意 - 如果服务用的是http而不是https的话,加上sslEnabled: false配置。

    6. 上传对象

    • 在controller中require 'aws-sdk'。
    • 创建一个key用于持有文件对象的名称。我们会将这个写到数据库中。
    • 设置存储桶名称和key。
    • 使用upload_file存储文件内容。
      由于Minio Server与AWS S3完美兼容,所以它能与aws-sdk无缝对接。
    1. class UploadsController < ApplicationController
    2. require 'aws-sdk'
    3. def new
    4. end
    5. def create
    6. # Create a new s3 resource with a new s3 client.
    7. s3 = Aws::S3::Resource.new(Aws::S3::Client.new)
    8. # Create a key.
    9. key = File.basename params[:file].path
    10. # Set the bucket and the key.
    11. obj = s3.bucket("resumes").object(params[:file].original_filename)
    12. # Upload the file.
    13. obj.upload_file(params[:file].open)
    14. # Save the uploaded details to the local database.
    15. @upload = Upload.new(
    16. url: obj.public_url,
    17. name: obj.key
    18. )
    19. if @upload.save
    20. redirect_to uploads_path, success: 'File successfully uploaded'
    21. else
    22. flash.now[:notice] = 'There was an error'
    23. render :new
    24. end
    25. end
    26. def index
    27. @uploads = Upload.all
    28. end
    29. end

    注意: 在这个例子中,我们使用aws-sdk库提供的upload_file api来完成上传过程。 如果我们想要在view上处理上传,我们会将文件发布到一个能够接受我们的POST提交的presigned URL。

    7. 创建Views

    创建一个可以做multipart upload的form。我们将使用file_field_tag来从本地选择文件,submit tag来提供form到upload controller进行处理。

    1. <div class="col-offset-lg-2 col-lg-12">
    2. <h1>Upload your Resume</h1>
    3. <div class="well" style="background-color: #EFE0D5;">
    4. <%= form_tag uploads_path, :html => {:multipart => true}, enctype: 'multipart/form-data' do %>
    5. <%= file_field_tag :file %> <br/>
    6. <%= submit_tag 'Upload file' , :class=>"btn btn-block btn-danger" %>
    7. <% end %>
    8. </div>
    9. </div>

    8. 运行App

    你可以从这里获取完整的代码。按下面所示启动这个rails服务。

    1. rake db:migrate
    2. rails s

    现在如果你访问http://localhost:3000 ,你应该可以看到这个示例程序。

    9. Explore Further

    • Using minio-js client SDK with Minio Server
    • Minio JavaScript client SDK API Reference

    原文: https://docs.minio.io/cn/ror-resume-uploader-app.html