加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails:从S3下载图像,调整大小并上传回S3

发布时间:2020-12-17 02:07:50 所属栏目:百科 来源:网络整理
导读:在我的Rails 4应用程序中,我使用Paperclip在S3上存储了大量图像.图片网址看起来像 http://s3.amazonaws.com/bucketname/files/images/000/000/012/small/image.jpg?1366900621. 给出以下附件类: 如何从S3下载图像并在本地存储? 然后如何调整本地存储的图像
在我的Rails 4应用程序中,我使用Paperclip在S3上存储了大量图像.图片网址看起来像 http://s3.amazonaws.com/bucketname/files/images/000/000/012/small/image.jpg?1366900621.

给出以下附件类:

>如何从S3下载图像并在本地存储?
>然后如何调整本地存储的图像的大小
>将调整大小的图像上传到另一个没有Paperclip的S3存储桶(在路径s3 / newbucket / images / {:id} / {imagesize.jpg})

附件类:

class Image < ActiveRecord::Base
  has_attached_file :file,styles: { thumbnail: '320x320',icon: '64x64',original: '1080x1080' }
  validates_attachment :file,presence: true,content_type: { content_type: /Aimage/.*Z/ }
end

解决方法

基本建议不是动态调整图像大小,因为这可能需要一段时间,并且您的用户可能会在此操作期间遇到大量响应时间.如果您有一些预定义的样式集,那么提前生成它们并在需要时返回它是明智的.

那么,如果没有其他选择,这就是你可以做的.

def download_from_s3 url_to_s3,filename
  uri = URI(url_to_s3)
  response = Net::HTTP.get_response(uri)
  File.open(filename,'wb'){|f| f.write(response.body)}
end

在这里,我们基本上下载了位于给定URL的图像,并将其作为文件保存在本地.调整大小可以通过几种不同的方式完成(这取决于您是否要将下载的文件作为Paperclip附件提供).
这里最常用的方法是使用image-magick及其转换命令行脚本.以下是将图像调整为宽度为30的示例:

convert  -strip -geometry 30 -quality 100 -sharpen 1 '/photos/aws_images/000/000/015/original/index.jpg' '/photos/aws_images/000/000/015/original/S_30_WIDTH__q_100__index.jpg' 2>&1 > /dev/null

你可以找到转换here的文档,它不仅适用于图像大小调整,还适用于图像格式之间的转换,模糊,裁剪等等!另外你可能会对Attachment-on-the-Fly gem感兴趣,这看起来有点过时,但对如何使用转换调整图像大小有一些见解.

最后一步是将调整大小的图像上传到某个S3存储桶.我假设你已经有了aws-sdk gem和AWS :: S3实例(可以找到文档here).

def upload_to_s3 bucket_name,key,file
  s3 = AWS::S3.new(:access_key_id => 'YOUR_ACCESS_KEY_ID',:secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
  bucket = s3.buckets[bucket_name]
  obj = bucket.objects[key]
  obj.write(File.open(file,'rb'),:acl => :public_read)
end

因此,在这里您获得一个AWS :: S3对象来与S3服务器通信,提供您的存储桶名称和所需的密钥,并基本上传一个带有选项的图像,以使其对Web上的每个人都可见.请注意,还有许多其他上载选项(包括文件加密,访问权限,元数据等).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读