gpt4 book ai didi

ruby-on-rails - Rails : Download images from S3, 调整大小并上传回 S3

转载 作者:行者123 更新时间:2023-12-04 07:29:45 24 4
gpt4 key购买 nike

在我的 Rails 4 应用程序中,我使用 Paperclip 在 S3 上存储了大量图像。图片网址看起来像 http://s3.amazonaws.com/bucketname/files/images/000/000/012/small/image.jpg?1366900621 .

给定以下附件类:

  • 如何从 S3 下载图像并存储在本地?
  • 那么如何调整本地存储的图像的大小
  • 将调整大小的图像上传到另一个没有回形针的 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和它的 convert命令行脚本。这是将图像大小调整为 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

    您可以找到 convert 的文档 here ,它不仅适用于图像调整大小,还适用于图像格式之间的转换、模糊、裁剪等等!您也可以关注 Attachment-on-the-Fly gem ,这似乎有点过时,但对如何使用 convert 调整图像大小有一些见解。 .

    最后一步是将调整大小的图像上传到一些 S3 bucket .我假设你已经有了 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::S3S3 通信的对象服务器,提供您的存储桶名称和所需的 key ,然后基本上上传带有选项的图像,使其对网络上的每个人都可见。请注意,还有许多额外的上传选项(包括文件加密、访问权限、元数据等等)。

    关于ruby-on-rails - Rails : Download images from S3, 调整大小并上传回 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29093644/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com