ruby on rails爬坑(四):使用AWS S3存取数据

来源:互联网 发布:蒙古入侵日本知乎 编辑:程序博客网 时间:2024/05/16 14:39

一,前言

在上一篇博客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#=> '...'

三,补充

两篇关于上传和下载的官方博客:

  • Uploading Files to Amazon S3
  • Downloading Objects from Amazon S3

至于S3更详细的内容,请查阅官方文档, 我正好用到上传下载,学得比较浅,有纰漏望指出。

0 0
原创粉丝点击