一,前言
在上一篇博客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更詳細的內容,請查閱官方文檔, 我正好用到上傳下載,學得比較淺,有紕漏望指出。