2

Ruby クライアントとサービス アカウント認証を使用して、GCS からファイルをダウンロードしようとしています。ここに私のコードがあります:

def build_client
  client = Google::APIClient.new()
  key = Google::APIClient::PKCS12.load_key(SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'notasecret')
  service_account = Google::APIClient::JWTAsserter.new(
      SERVICE_ACCOUNT_EMAIL,
      'https://www.googleapis.com/auth/devstorage.full_control',
  key)
  client.authorization = service_account.authorize
  client
end

client = build_client
storage = client.discovered_api('storage', 'v1beta2')

#Get (download) a specific object from a bucket
bucket_get_result = client.execute(
    api_method: storage.objects.get,
    parameters: {bucket: BUCKET, object: params[:file_name], alt: 'media'}
)
puts bucket_get_result.body

結果の本文は、次のようなリダイレクトの詳細です。

<HTML>
<HEAD>
<TITLE>Temporary Redirect</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Temporary Redirect</H1>
The document has moved <A     HREF="https://storage.googleapis.com/my_bucket_name/my_file_name">here</A>.
</BODY>
</HTML>

...そして、リダイレクトの「場所」に行こうとすると、Unauthorized HTTP が返されます。では、Ruby クライアントを使用して GCS からファイルをダウンロードするにはどうすればよいでしょうか。https://developers.google.com/storage/docs/json_api/v1/objects/get言います:

URL パラメーター alt=media を指定すると、応答本文のオブジェクト データで応答します。

4

1 に答える 1