9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】ActiveStorageを使わずにGoogle Cloud Storage(GCS)を使う

Posted at

概要

RailsでGoogle Cloud Storage(GCS)を使うとなると、ActiveStorageを使う方法が挙がりますが、ActiveRecordを使わないケース(*1)や、そもそもActiveStorageを導入するのが手間だったりすることがあると思います。
ので、ActiveStorageを使わず比較的手軽にGCSを使う方法を紹介します。

*1…2020年2月時点だと、ActiveRecordにしか対応してないみたいです。ActiveStorage and Mongo #31408

事前準備

サンプルの概要

以下のような処理を想定して、GCS使用部分のサンプルを書きます。

実装サンプル

バケットの取得

Exampleを参考にして、バケットを取得します。また、事前準備で取得したkeyファイルは、configフォルダ配下に配置しているものとします。

google_cloud_storage_util.rb
require "google/cloud/storage"

module GoogleCloudStorageUtil

  def getBucket()
    storage = Google::Cloud::Storage.new(
      project_id: "GCPのプロジェクトIDを入力",
      credentials: "config/test_key.json"
    )
    storage.bucket "事前準備で作成したバケット名を入力"
  end
end

ファイルの確認・削除

アップロードするファイルはパス(フォルダ名+ファイル名)で一意にするので、受け取ったファイル名で既に存在する場合は削除します。

google_cloud_storage_util.rb
  def deleteImageFile(fileName, bucket)
    file = bucket.file("test_folder/" + fileName)
    if !file.nil?
      file.delete
    end
  end

ファイルの追加

指定したパスにファイルを追加します。multipart/form-dataで受け取った場合は、tempfileで送信します。

google_cloud_storage_util.rb
  def addImageFile(imageFile, fileName, bucket)
    # tempfileを送る
    bucket.create_file(imageFile.tempfile, "test_folder/" + fileName)
  end

参照用URLの取得

アップロードしたファイルをパブリックで参照するためには、期限付きのURLを取得する必要があります。

google_cloud_storage_util.rb
  def getImageUrl(fileName, bucket)
    file = bucket.file("test_folder/" + fileName)
    if !file.nil?
      file.signed_url(method: "GET", expires: 60 * 60 * 24)
    else
      nil
    end
  end

参考記事など

google-cloud-storage API documentation
Google Cloud Storageのファイルを指定したファイル名でダウンロードしたい

9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?