一,前言
在上一篇博客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更详细的内容,请查阅官方文档, 我正好用到上传下载,学得比较浅,有纰漏望指出。
版权声明:本文为code_for_free原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。