Cloudinary Upload API简介:轻松替代AWS S3

因此,您已经开发了一个令人印象深刻的Rails APP,它可以显示图像库。 是时候通过Heroku在全球网络上发布它了。 当前在本地开发环境中上传的图像默认为本地psql。 在生产环境(Heroku)中,云存储服务存储图像。

通过流行的选择,AWS S3云服务将适合托管您的图像。 他们提供免费计划,但要注册该计划,则需要信用卡/借记卡。 以我的经验,设置AWS进行图像处理是一个挑战。 如果不谨慎的话; API密钥和机密将在Github上公开。

不道德的机器人正在四处寻找这些凭证,以利用计算资源。 因此产生了巨额账单。

由于Heroku不托管图片,因此Heroku的附加云服务Cloudinary可以托管。 它为Web应用程序的整个图像管理管道提供了解决方案。 Cloudinary提供了全面的API和管理功能。 很容易与Heroku上现有的或新的任何Web应用程序集成。 Cloudinary提供基于URL和HTTP的API。 这有助于与任何Web开发框架集成。

与建立一个单独的Cloudinary帐户相反。 到本文结尾,用户将通过Heroku上的rails应用程序上传图片。 在后端,图像上传到Cloudinary或从Cloudinary删除。 您的rails应用程序通过API交换显示Cloudinary上托管的图像。 最好的部分是Cloudinary不会要求您的信用卡注册10GB的免费存储空间。

作者的假设

做出以下假设:

  • 您正在使用Heroku托管rails应用程序。
  • Heroku CLI已安装在您的计算机上。
  • 您的Rails应用已推送到Heroku。

Cloudinary本地和云设置

编辑您的Gemfile,添加以下行。

# ./gemfile

gem ‘carrierwave’
gem ‘cloudinary’

运行“运行软件包安装”以安装插入的gem。

登录Herokuapp页面,然后按如下所示单击该应用程序;

导航到“资源”。

在搜索框中找到并选择Cloudinary,如下所示;

选择“开始计划”以免费使用,然后单击设置。

现在,您已重定向到Cloudinary管理页面。 通知生成的凭证。 复制云名称,API密钥,API机密和环境变量。

为了隐藏API密钥和秘密,我们将代码保存在Github中。 首先,导航至设置,然后单击配置变量。 输入凭证(CL_ID,CL_key,Cloudinary_URL),如下所示;

在“ config”文件夹中创建一个cloudinary.yml文件。 复制模板并将其粘贴到新文件中。 将Cloud_name替换为Cloudinary管理控制台中找到的实际云名称。 此配置指定凭据以及其他属性。

# config/cloudinary.yml

---
development:
  cloud_name: cloud_name
  api_key: <%= ENV[ "CL_ID" ] %>
  api_secret: <%= ENV[ "CL_KEY" ] %>
  enhance_image_tag: true
  static_file_support: false
production:
  cloud_name: cloud_name
  api_key: <%= ENV[ "CL_ID" ] %>
  api_secret: <%= ENV[ "CL_KEY" ] %>
  enhance_image_tag: true
  static_file_support: true
test:
  cloud_name: cloud_name
  api_key: <%= ENV[ "CL_ID" ] %>
  api_secret: <%= ENV[ "CL_KEY" ] %>
  enhance_image_tag: true
  static_file_support: false

如下创建一个初始化程序cloudinary.rb。 Rails服务器启动时,以下配置将生效。

Cloudinary.config do |config|
  config.cloud_name = 'cloud_name'
  config.api_key = ENV[ "CL_ID" ]
  config.api_secret = ENV[ "CL_KEY" ]
  config.secure = true
  config.cdn_subdomain = true
end

假设您已经建立了图像上传功能(如了解足够的教程中所示)。 设置Cloudinary的上传器,如下所示;

# app/uploader/picture.rb

class PictureUploader < CarrierWave::Uploader:: Base
  include CarrierWave::MiniMagick
  include Cloudinary::CarrierWave
  
  # Specify dimensions for images to resize to for appropriate display fit
  version :standard do
    process :resize_to_fill => [ 400 , 400 , :north ]          
  end

  # Cloudinary will be utilized in production (Heroku) while local psql stored us utilized in development and testing environment.
  if Rails.env.production?
    include Cloudinary::CarrierWave
    CarrierWave.configure do |config|
      config.cache_storage = :file
    end
  else
    storage :file
  end

  # Cloudinary public file path to upload and display pictures
  def store_dir
    "uploads/ #{model. class .to_s.underscore} / #{mounted_as} / #{model.id} "
  end
  
  # Only files with extension jpg jpeg, gif and png will be uploaded
  def extension_whitelist
    %w[jpg jpeg gif png]
  end
end

对于图像上传表单,请在前端视图上模拟以下erb表单;

# app/views/micropost/_form.html.erb

 <%=  form_with( model: @post, local: true ) do |form|  %> 
.
.
< span class = "picture" >
   <%=  form.file_field :picture , accept: 'image/jpeg,image/gif,image/png'  %> 
</ span >
.
.
 <%  end  %>

对于图像显示,在前端视图上模拟以下erb标签;

# app/views/micropost/_feed.html.erb

<% @feeds.each do |p| %>
.
.
<%= image_tag p.picture.url if p.picture? %>
.
.
<% end %>

现在您已经完成了,将rails应用程序推送到Heroku并对其进行测试。

查看我的Gitbub Repo ,看看它是如何完成的。

From: https://hackernoon.com/alternative-to-aws-s3-cloud-image-storage-and-display-for-rails-on-heroku-yw8d3zos

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值