ruby on rails爬坑(四):使用AWS S3存取數據

一,前言

在上一篇博客ruby on rails爬坑(三):圖片上傳及顯示中提到AWS S3,這篇博客將簡單介紹如何在rails項目中使用AWS S3.

二,步驟

  • 在亞馬遜雲服務中心開通配置AWS S3服務
  • 在Gemfile中添加aws-sdk

    gem 'aws-sdk', '~> 2'
  • 在config/initializers文件夾下新建aws.rb(initializers文件夾下的內容在程序啓動時會被自動調用),用於在全局初始化S3_BUCKET,一處配置,各處使用,內容如下:

    region = "your region name"
    accessKeyID = "your keyID" 
    secretKey = "your key"
    bucket = "your bucket name"
    
    Aws.config.update({
      region: region,
      credentials: Aws::Credentials.new(accessKeyID, secretKey),
    })
    
    S3_BUCKET = Aws::S3::Resource.new.bucket(bucket)
  • 上傳測試: 嘗試上傳一首歌

    
    #url:文件的本地路徑
    
    def upload_mp3(url)
        md5 = Digest::MD5.hexdigest(url)
    
        file = Tempfile.new([md5, '.mp3'])
        file.binmode
        open(URI.parse(url)) do |data|
          file.write data.read
        end
        file.rewind
    
        key = "#{Time.now.strftime("%Y/%m%d")}/#{md5}.mp3"
    
        obj = S3_BUCKET.object("audio/#{key}")  #使用之前配置好的S3_BUCKET
        obj.upload_file(file, {
          :content_type => "audio/mpeg",
          :cache_control => "max-age=604800",
          :acl => "public-read"
        })
        return obj.public_url  #返回S3中該文件的地址,供我們下載使用
    end
  • 下載測試: region-name, bucket-name分別與上文配置的region, bucket對應,object-key與上文上傳測試中指定的key對應。

    s3 = Aws::S3::Client.new(region: 'region-name')
    resp = s3.get_object(bucket:'bucket-name', key:'object-key')
    
    resp.body
    
    #=> #<StringIO ...> 
    
    
    resp.body.read
    
    #=> '...'
    

三,補充

兩篇關於上傳和下載的官方博客:

至於S3更詳細的內容,請查閱官方文檔, 我正好用到上傳下載,學得比較淺,有紕漏望指出。

發佈了32 篇原創文章 · 獲贊 87 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章