如何使用 Rails 和七牛云存储,在 15 分钟内打造一个图片分享社交应用原型

下面是如何使用 Rails 和七牛云存储,在 15 分钟内打造一个图片分享社交应用原型的完整攻略。

准备工作

在开始前,你需要做好以下几个准备工作。

安装 Rails

首先,你需要在本地安装 Ruby on Rails,可以通过 RubyGems 安装最新版的 Rails。

gem install rails

注册七牛账号并创建存储空间

其次,你需要注册一个七牛账号,并创建一个存储空间,将来我们会将图片存储在这个空间。

安装 qiniu gem

最后,你需要安装 qiniu gem,它是一个 Ruby SDK,方便你使用七牛云存储的 API。

gem install qiniu

创建 Rails 应用

接下来,你可以通过以下命令创建一个新的 Rails 应用。

rails new image_share
cd image_share

集成七牛云存储

配置七牛云存储

在项目中,我们需要通过 qiniu gem 将图片上传到七牛云存储,并在页面中显示。

首先,我们需要在 config/initializers/qiniu.rb 文件中添加以下代码,并将其中的 ACCESS_KEY、SECRET_KEY 和 BUCKET_NAME 替换为你自己的密钥和存储空间名称。

require 'qiniu'

Qiniu.establish_connection! access_key: 'ACCESS_KEY',
                            secret_key: 'SECRET_KEY'

BUCKET_NAME = 'BUCKET_NAME'

编写上传图片和显示图片的代码

接下来,我们需要在 app/controllers/images_controller.rb 中编写上传图片和显示图片的代码。

首先,我们需要添加 create 方法,来处理上传图片请求。在该方法中,我们首先需要将上传文件存储到本地,然后将其上传到七牛云存储,并返回上传成功后的 URL。

class ImagesController < ApplicationController
  def create
    uploaded_io = params[:image][:file]
    filename = SecureRandom.uuid + File.extname(uploaded_io.original_filename)
    File.open(Rails.root.join('public', 'uploads', filename), 'wb') do |file|
      file.write(uploaded_io.read)
    end

    key = filename
    filepath = Rails.root.join('public', 'uploads', filename).to_s
    put_policy = Qiniu::Auth::PutPolicy.new(BUCKET_NAME, key)
    uptoken = Qiniu::Auth.generate_uptoken(put_policy)
    code, result, response_headers = Qiniu::Storage.upload_with_token_2(
      uptoken, filepath, key, nil, bucket: BUCKET_NAME
    )

    render json: { url: "https://#{BUCKET_NAME}.qiniudn.com/#{filename}" }
  end
end

然后,我们需要添加 show 方法,来显示图片。在该方法中,我们只需要根据传入的文件名从七牛云存储中获取 URL 并返回即可。

class ImagesController < ApplicationController
  def show
    filename = params[:id]
    render json: { url: "https://#{BUCKET_NAME}.qiniudn.com/#{filename}" }
  end
end

最后,我们需要在 config/routes.rb 中添加两个路由,以便访问上述两个方法。

Rails.application.routes.draw do
  resources :images, only: [:create, :show]
end

编写前端代码

最后,我们需要在前端代码中,通过 JavaScript 发送上传图片的请求,并将上传成功后返回的 URL 显示在页面上。

修改前端代码

首先,我们需要在 app/views/layouts/application.html.erb 中,添加引入 qiniu.js 和一个用于显示上传结果的元素。

<%= javascript_include_tag "https://cdn.staticfile.org/qiniu-js-sdk/1.0.24/qiniu.min.js" %>

<div class="container">
  <%= yield %>

  <div id="upload_result"></div>
</div>

然后,我们需要在 app/views/images/new.html.erb 中添加上传图片的表单,并编写 JavaScript 代码。

<h1>Upload Image</h1>

<p>
  <%= form_tag images_path, method: :post, authenticity_token: true do %>
    <%= file_field_tag :file %>
    <%= submit_tag "Upload" %>
  <% end %>
</p>

<script>
  $(function() {
    $('form').submit(function(e) {
      e.preventDefault();
      var formData = new FormData($(this)[0]);
      $.ajax({
        url: $(this).attr('action'),
        type: $(this).attr('method'),
        data: formData,
        async: false,
        cache: false,
        contentType: false,
        processData: false,
        success: function(result) {
          $('#upload_result').append($('<img>').attr('src', result.url));
        },
        error: function(xhr, status, error) {
          console.log(xhr.responseText);
        }
      });
      return false;
    });
  });
</script>

运行 Rails 应用

最后,我们可以通过以下命令启动 Rails 应用,并访问 http://localhost:3000/images/new 网址上传图片并上传成功后将图片显示在页面上。

rails server

示例说明

  1. 已经有一个 Rails 应用,现在需要将图片上传至七牛云存储并在页面上显示。

首先,在 config/initializers/qiniu.rb 文件中添加七牛云存储的配置信息,然后在 app/controllers/images_controller.rb 中编写上传图片和显示图片的代码,并在前端代码中添加上传图片的表单和 JavaScript 代码。最后启动 Rails 应用,在网页上上传图片并上传成功后将图片显示在页面上。

  1. 已经使用了七牛云存储,但需要将图片上传和显示的代码整合到一个控制器中。

首先,将上传图片的代码迁移到 index 方法中,然后重命名 show 方法为 index 方法,将其用于显示图片并直接返回 URL。在前端代码中修改 AJAX 请求的 url,以便将其发送到 index 方法中。最后修改路由,将 show 路由改为 index 路由。完成后可以测试上传图片并将图片显示在页面上。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用 Rails 和七牛云存储,在 15 分钟内打造一个图片分享社交应用原型 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Jexus 5.8.2正式发布! 为Asp.Net Core生产环境提供平台支持

    Jexus 5.8.2正式发布! 为Asp.Net Core生产环境提供平台支持 Jexus是一款基于Java的Web服务器,支持多种Web开发语言和框架,包括Asp.Net Core。Jexus 5.8.2是最新版本,为Asp.Net Core生产环境提供了平台支持。本文将详细讲解如何使用Jexus 5.8.2在Asp.Net Core生产环境中部署Web…

    云计算 2023年5月16日
    00
  • ASP.NET Core 2.0 本地文件操作问题及解决方案

    ASP.NET Core 2.0 本地文件操作问题及解决方案 在ASP.NET Core 2.0应用程序中,本地文件操作是一个常见的需求,然而,有时候ASP.NET Core应用程序在进行本地文件操作时会遇到问题。本文将介绍这些问题,并提供解决方案。 问题1: 没有读取权限 当您尝试从本地文件系统中读取文件时,您的应用程序可能会遇到“没有足够的权限访问此文件…

    云计算 2023年5月17日
    00
  • 深入浅析Nginx实现AJAX跨域请求问题

    Nginx 是一款高性能的 Web 服务器和反向代理服务器,可以用于实现 AJAX 跨域请求。本文将深入浅析 Nginx 实现 AJAX 跨域请求问题的完整攻略,包括原理、配置和示例说明。 原理 AJAX 跨域请求问题是由于浏览器的同源策略导致的。同源策略是浏览器的一种安全策略,它限制了来自不同源的脚本在同一个文档中运行。同源是指协议、域名和端口号都相同。如…

    云计算 2023年5月16日
    00
  • 云计算是什么意思 云计算与云存储深度分析与介绍

    云计算是什么意思 云计算与云存储深度分析与介绍 云计算是什么意思 云计算是一种基于互联网的计算方式,它通过网络将计算资源、存储资源和应用程序等服务提供给用户。云计算可以帮助用户节省成本,提高效率,提高数据安全性和可靠性。 云计算的主要特点包括: 弹性扩展:云计算可以根据用户的需求进行弹性扩展和缩容,可以快速响应用户的需求,提高业务的灵活性和可靠性。 按需付费…

    云计算 2023年5月16日
    00
  • 云计算基础-0

    记录学习云计算的笔记,主要是学习阿里云上的几个主要云产品 基础 云分类 共有云:所有人都可以访问的 私有云:私人使用的(通过内网实现) 混合云:公有云和私有云混合使用(不重要的数据放公有云,重要数据放私有云,中间通过隧道技术连接) 云计算的服务模式 IAAS:只提供单个基础设备,比如买一个云服务器(裸机) PAAS:提供基础设备并带一些服务,比如买一台云服务…

    2023年4月9日
    00
  • python中scrapy处理项目数据的实例分析

    针对“python中scrapy处理项目数据的实例分析”的完整攻略,我将分别从以下几个方面进行讲解: scrapy项目数据的处理流程 scrapy数据抓取的实现方式 scrapy数据处理的实例说明 1. scrapy项目数据的处理流程 scrapy的数据处理流程主要包括:数据抓取、数据解析、数据存储。下面分别对这三个步骤进行说明: 数据抓取:通过HTTP请求…

    云计算 2023年5月19日
    00
  • TKE 超级节点,Serverless 落地的最佳形态

    陈冰心,腾讯云产品经理,负责超级节点迭代与客户拓展,专注于 TKE Serverless 产品演进。 背景 让人又爱又恨的 Serverless Serverless 炙手可热,被称为云原生未来发展的方向。信通院报告显示:在核心业务中使用 Serverless 的用户占到18.11%,已经开始和计划使用 Serverless 技术的用户超过了70%。Serv…

    2023年4月10日
    00
  • ASP.NET的Core AD域登录过程示例

    下面是关于“ASP.NET Core AD域登录过程示例”的完整攻略,包含两个示例说明。 简介 在ASP.NET Core中,我们可以使用Active Directory(AD)域来实现用户身份验证和授权。AD域是一种基于Windows Server的目录服务,它可以存储和管理用户、计算机和其他网络资源的信息。在本攻略中,我们将演示如何在ASP.NET Co…

    云计算 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部