Retrieve metadata from a Cloud Storage bucket.
Explore further
For detailed documentation that includes this code sample, see the following:
- Enable and use object retention configurations
- Get bucket metadata
- Manage object lifecycles
- Set up and view CORS configurations
- Use customer-managed encryption keys
- Using bucket labels
Code sample
C++
For more information, see the Cloud Storage C++ API reference documentation .
To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries .
namespace
gcs
=
::
google
::
cloud
::
storage
;
using
::
google
::
cloud
::
StatusOr
;
[](
gcs
::
Client
client
,
std
::
string
const
&
bucket_name
)
{
StatusOr<gcs
::
BucketMetadata
>
bucket_metadata
=
client
.
GetBucketMetadata
(
bucket_name
);
if
(
!
bucket_metadata
)
throw
std
::
move
(
bucket_metadata
).
status
();
std
::
cout
<<
"The metadata for bucket "
<<
bucket_metadata
-
> name
()
<<
" is "
<<
*
bucket_metadata
<<
"
\n
"
;
}
C#
For more information, see the Cloud Storage C# API reference documentation .
To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries .
using
Google.Apis.Storage.v1.Data
;
using
Google.Cloud.Storage.V1
;
using
System
;
public
class
GetBucketMetadataSample
{
public
Bucket
GetBucketMetadata
(
string
bucketName
=
"your-unique-bucket-name"
)
{
var
storage
=
StorageClient
.
Create
();
var
bucket
=
storage
.
GetBucket
(
bucketName
,
new
GetBucketOptions
{
Projection
=
Projection
.
Full
});
Console
.
WriteLine
(
$"Bucket:\t{bucket.Name}"
);
Console
.
WriteLine
(
$"Acl:\t{bucket. Acl
}"
);
Console
.
WriteLine
(
$"Billing:\t{bucket.Billing}"
);
Console
.
WriteLine
(
$"Cors:\t{bucket.Cors}"
);
Console
.
WriteLine
(
$"DefaultEventBasedHold:\t{bucket.DefaultEventBasedHold}"
);
Console
.
WriteLine
(
$"DefaultObjectAcl:\t{bucket.DefaultObjectAcl}"
);
Console
.
WriteLine
(
$"Encryption:\t{bucket.Encryption}"
);
if
(
bucket
.
Encryption
!=
null
)
{
Console
.
WriteLine
(
$"KmsKeyName:\t{bucket.Encryption.DefaultKmsKeyName}"
);
}
Console
.
WriteLine
(
$"Id:\t{bucket.Id}"
);
Console
.
WriteLine
(
$"Kind:\t{bucket.Kind}"
);
Console
.
WriteLine
(
$"Lifecycle:\t{bucket.Lifecycle}"
);
Console
.
WriteLine
(
$"Location:\t{bucket.Location}"
);
Console
.
WriteLine
(
$"LocationType:\t{bucket.LocationType}"
);
Console
.
WriteLine
(
$"Logging:\t{bucket.Logging}"
);
Console
.
WriteLine
(
$"Metageneration:\t{bucket.Metageneration}"
);
Console
.
WriteLine
(
$"ObjectRetention:\t{bucket.ObjectRetention}"
);
Console
.
WriteLine
(
$"Owner:\t{bucket.Owner}"
);
Console
.
WriteLine
(
$"ProjectNumber:\t{bucket.ProjectNumber}"
);
Console
.
WriteLine
(
$"RetentionPolicy:\t{bucket.RetentionPolicy}"
);
Console
.
WriteLine
(
$"SelfLink:\t{bucket.SelfLink}"
);
Console
.
WriteLine
(
$"StorageClass:\t{bucket.StorageClass}"
);
Console
.
WriteLine
(
$"TimeCreated:\t{bucket.TimeCreated}"
);
Console
.
WriteLine
(
$"Updated:\t{bucket.Updated}"
);
Console
.
WriteLine
(
$"Versioning:\t{bucket.Versioning}"
);
Console
.
WriteLine
(
$"Website:\t{bucket.Website}"
);
Console
.
WriteLine
(
$"TurboReplication:\t{bucket.Rpo}"
);
if
(
bucket
.
Labels
!=
null
)
{
Console
.
WriteLine
(
"Labels:"
);
foreach
(
var
label
in
bucket
.
Labels
)
{
Console
.
WriteLine
(
$"{label. Key
}:\t{label.Value}"
);
}
}
return
bucket
;
}
}
Go
For more information, see the Cloud Storage Go API reference documentation .
To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries .
import
(
"context"
"fmt"
"io"
"time"
"cloud.google.com/go/storage"
)
// getBucketMetadata gets the bucket metadata.
func
getBucketMetadata
(
w
io
.
Writer
,
bucketName
string
)
(
*
storage
.
BucketAttrs
,
error
)
{
// bucketName := "bucket-name"
ctx
:=
context
.
Background
()
client
,
err
:=
storage
.
NewClient
(
ctx
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"storage.NewClient: %w"
,
err
)
}
defer
client
.
Close
()
ctx
,
cancel
:=
context
.
WithTimeout
(
ctx
,
time
.
Second
*
10
)
defer
cancel
()
attrs
,
err
:=
client
.
Bucket
(
bucketName
).
Attrs
(
ctx
)
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"Bucket(%q).Attrs: %w"
,
bucketName
,
err
)
}
fmt
.
Fprintf
(
w
,
"BucketName: %v\n"
,
attrs
.
Name
)
fmt
.
Fprintf
(
w
,
"Location: %v\n"
,
attrs
.
Location
)
fmt
.
Fprintf
(
w
,
"LocationType: %v\n"
,
attrs
.
LocationType
)
fmt
.
Fprintf
(
w
,
"StorageClass: %v\n"
,
attrs
.
StorageClass
)
fmt
.
Fprintf
(
w
,
"Turbo replication (RPO): %v\n"
,
attrs
.
RPO
)
fmt
.
Fprintf
(
w
,
"TimeCreated: %v\n"
,
attrs
.
Created
)
fmt
.
Fprintf
(
w
,
"Metageneration: %v\n"
,
attrs
.
MetaGeneration
)
fmt
.
Fprintf
(
w
,
"PredefinedACL: %v\n"
,
attrs
.
PredefinedACL
)
if
attrs
.
Encryption
!=
nil
{
fmt
.
Fprintf
(
w
,
"DefaultKmsKeyName: %v\n"
,
attrs
.
Encryption
.
DefaultKMSKeyName
)
}
if
attrs
.
Website
!=
nil
{
fmt
.
Fprintf
(
w
,
"IndexPage: %v\n"
,
attrs
.
Website
.
MainPageSuffix
)
fmt
.
Fprintf
(
w
,
"NotFoundPage: %v\n"
,
attrs
.
Website
.
NotFoundPage
)
}
fmt
.
Fprintf
(
w
,
"DefaultEventBasedHold: %v\n"
,
attrs
.
DefaultEventBasedHold
)
if
attrs
.
RetentionPolicy
!=
nil
{
fmt
.
Fprintf
(
w
,
"RetentionEffectiveTime: %v\n"
,
attrs
.
RetentionPolicy
.
EffectiveTime
)
fmt
.
Fprintf
(
w
,
"RetentionPeriod: %v\n"
,
attrs
.
RetentionPolicy
.
RetentionPeriod
)
fmt
.
Fprintf
(
w
,
"RetentionPolicyIsLocked: %v\n"
,
attrs
.
RetentionPolicy
.
IsLocked
)
}
fmt
.
Fprintf
(
w
,
"ObjectRetentionMode: %v\n"
,
attrs
.
ObjectRetentionMode
)
fmt
.
Fprintf
(
w
,
"RequesterPays: %v\n"
,
attrs
.
RequesterPays
)
fmt
.
Fprintf
(
w
,
"VersioningEnabled: %v\n"
,
attrs
.
VersioningEnabled
)
if
attrs
.
Logging
!=
nil
{
fmt
.
Fprintf
(
w
,
"LogBucket: %v\n"
,
attrs
.
Logging
.
LogBucket
)
fmt
.
Fprintf
(
w
,
"LogObjectPrefix: %v\n"
,
attrs
.
Logging
.
LogObjectPrefix
)
}
if
attrs
.
CORS
!=
nil
{
fmt
.
Fprintln
(
w
,
"CORS:"
)
for
_
,
v
:=
range
attrs
.
CORS
{
fmt
.
Fprintf
(
w
,
"\tMaxAge: %v\n"
,
v
.
MaxAge
)
fmt
.
Fprintf
(
w
,
"\tMethods: %v\n"
,
v
.
Methods
)
fmt
.
Fprintf
(
w
,
"\tOrigins: %v\n"
,
v
.
Origins
)
fmt
.
Fprintf
(
w
,
"\tResponseHeaders: %v\n"
,
v
.
ResponseHeaders
)
}
}
if
attrs
.
Labels
!=
nil
{
fmt
.
Fprintf
(
w
,
"\n\n\nLabels:"
)
for
key
,
value
:=
range
attrs
.
Labels
{
fmt
.
Fprintf
(
w
,
"\t%v = %v\n"
,
key
,
value
)
}
}
return
attrs
,
nil
}
Java
For more information, see the Cloud Storage Java API reference documentation .
To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries .
import
com.google.cloud.storage. Bucket
;
import
com.google.cloud.storage. BucketInfo
;
import
com.google.cloud.storage. Storage
;
import
com.google.cloud.storage. StorageOptions
;
import
java.util.Map
;
public
class
GetBucketMetadata
{
public
static
void
getBucketMetadata
(
String
projectId
,
String
bucketName
)
{
// The ID of your GCP project
// String projectId = "your-project-id";
// The ID of your GCS bucket
// String bucketName = "your-unique-bucket-name";
Storage
storage
=
StorageOptions
.
newBuilder
().
setProjectId
(
projectId
).
build
().
getService
();
// Select all fields. Fields can be selected individually e.g. Storage.BucketField.NAME
Bucket
bucket
=
storage
.
get
(
bucketName
,
Storage
.
BucketGetOption
.
fields
(
Storage
.
BucketField
.
values
()));
// Print bucket metadata
System
.
out
.
println
(
"BucketName: "
+
bucket
.
getName
());
System
.
out
.
println
(
"DefaultEventBasedHold: "
+
bucket
.
getDefaultEventBasedHold
());
System
.
out
.
println
(
"DefaultKmsKeyName: "
+
bucket
.
getDefaultKmsKeyName
());
System
.
out
.
println
(
"Id: "
+
bucket
.
getGeneratedId
());
System
.
out
.
println
(
"IndexPage: "
+
bucket
.
getIndexPage
());
System
.
out
.
println
(
"Location: "
+
bucket
.
getLocation
());
System
.
out
.
println
(
"LocationType: "
+
bucket
.
getLocationType
());
System
.
out
.
println
(
"Metageneration: "
+
bucket
.
getMetageneration
());
System
.
out
.
println
(
"NotFoundPage: "
+
bucket
.
getNotFoundPage
());
System
.
out
.
println
(
"RetentionEffectiveTime: "
+
bucket
.
getRetentionEffectiveTime
());
System
.
out
.
println
(
"RetentionPeriod: "
+
bucket
.
getRetentionPeriod
());
System
.
out
.
println
(
"RetentionPolicyIsLocked: "
+
bucket
.
retentionPolicyIsLocked
());
System
.
out
.
println
(
"RequesterPays: "
+
bucket
.
requesterPays
());
System
.
out
.
println
(
"SelfLink: "
+
bucket
.
getSelfLink
());
System
.
out
.
println
(
"StorageClass: "
+
bucket
.
getStorageClass
().
name
());
System
.
out
.
println
(
"TimeCreated: "
+
bucket
.
getCreateTime
());
System
.
out
.
println
(
"VersioningEnabled: "
+
bucket
.
versioningEnabled
());
System
.
out
.
println
(
"ObjectRetention: "
+
bucket
.
getObjectRetention
());
if
(
bucket
.
getLabels
()
!=
null
)
{
System
.
out
.
println
(
"\n\n\nLabels:"
);
for
(
Map
.
Entry<String
,
String
>
label
:
bucket
.
getLabels
().
entrySet
())
{
System
.
out
.
println
(
label
.
getKey
()
+
"="
+
label
.
getValue
());
}
}
if
(
bucket
.
getLifecycleRules
()
!=
null
)
{
System
.
out
.
println
(
"\n\n\nLifecycle Rules:"
);
for
(
BucketInfo
.
LifecycleRule
rule
:
bucket
.
getLifecycleRules
())
{
System
.
out
.
println
(
rule
);
}
}
}
}
Node.js
For more information, see the Cloud Storage Node.js API reference documentation .
To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries .
// Imports the Google Cloud client library
const
{
Storage
}
=
require
(
' @google-cloud/storage
'
);
// Creates a client
const
storage
=
new
Storage
();
async
function
getBucketMetadata
()
{
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// The ID of your GCS bucket
// const bucketName = 'your-unique-bucket-name';
// Get Bucket Metadata
const
[
metadata
]
=
await
storage
.
bucket
(
bucketName
).
getMetadata
();
console
.
log
(
JSON
.
stringify
(
metadata
,
null
,
2
));
}
PHP
For more information, see the Cloud Storage PHP API reference documentation .
To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries .
use Google\Cloud\Storage\StorageClient;
/**
* Get bucket metadata.
*
* @param string $bucketName The name of your Cloud Storage bucket.
* (e.g. 'my-bucket')
*/
function get_bucket_metadata(string $bucketName): void
{
$storage = new StorageClient();
$bucket = $storage->bucket($bucketName);
$info = $bucket->info();
printf('Bucket Metadata: %s' . PHP_EOL, print_r($info, true));
}
Python
For more information, see the Cloud Storage Python API reference documentation .
To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries .
from
google.cloud
import
storage
def
bucket_metadata
(
bucket_name
):
"""Prints out a bucket's metadata."""
# bucket_name = 'your-bucket-name'
storage_client
=
storage
.
Client
()
bucket
=
storage_client
.
get_bucket
(
bucket_name
)
print
(
f
"ID:
{
bucket
.
id
}
"
)
print
(
f
"Name:
{
bucket
.
name
}
"
)
print
(
f
"Storage Class:
{
bucket
.
storage_class
}
"
)
print
(
f
"Location:
{
bucket
.
location
}
"
)
print
(
f
"Location Type:
{
bucket
.
location_type
}
"
)
print
(
f
"Cors:
{
bucket
.
cors
}
"
)
print
(
f
"Default Event Based Hold:
{
bucket
.
default_event_based_hold
}
"
)
print
(
f
"Default KMS Key Name:
{
bucket
.
default_kms_key_name
}
"
)
print
(
f
"Metageneration:
{
bucket
.
metageneration
}
"
)
print
(
f
"Public Access Prevention:
{
bucket
.
iam_configuration
.
public_access_prevention
}
"
)
print
(
f
"Retention Effective Time:
{
bucket
.
retention_policy_effective_time
}
"
)
print
(
f
"Retention Period:
{
bucket
.
retention_period
}
"
)
print
(
f
"Retention Policy Locked:
{
bucket
.
retention_policy_locked
}
"
)
print
(
f
"Object Retention Mode:
{
bucket
.
object_retention_mode
}
"
)
print
(
f
"Requester Pays:
{
bucket
.
requester_pays
}
"
)
print
(
f
"Self Link:
{
bucket
.
self_link
}
"
)
print
(
f
"Time Created:
{
bucket
.
time_created
}
"
)
print
(
f
"Versioning Enabled:
{
bucket
.
versioning_enabled
}
"
)
print
(
f
"Labels:
{
bucket
.
labels
}
"
)
Ruby
For more information, see the Cloud Storage Ruby API reference documentation .
To authenticate to Cloud Storage, set up Application Default Credentials. For more information, see Set up authentication for client libraries .
def
get_bucket_metadata
bucket_name
:
# The ID of your GCS bucket
# bucket_name = "your-unique-bucket-name"
require
"google/cloud/storage"
storage
=
Google
::
Cloud
::
Storage
.
new
bucket
=
storage
.
bucket
bucket_name
puts
"ID:
#{
bucket
.
id
}
"
puts
"Name:
#{
bucket
.
name
}
"
puts
"Storage Class:
#{
bucket
.
storage_class
}
"
puts
"Location:
#{
bucket
.
location
}
"
puts
"Location Type:
#{
bucket
.
location_type
}
"
puts
"Cors:
#{
bucket
.
cors
}
"
puts
"Default Event Based Hold:
#{
bucket
.
default_event_based_hold?
}
"
puts
"Default KMS Key Name:
#{
bucket
.
default_kms_key
}
"
puts
"Logging Bucket:
#{
bucket
.
logging_bucket
}
"
puts
"Logging Prefix:
#{
bucket
.
logging_prefix
}
"
puts
"Metageneration:
#{
bucket
.
metageneration
}
"
puts
"Retention Effective Time:
#{
bucket
.
retention_effective_at
}
"
puts
"Retention Period:
#{
bucket
.
retention_period
}
"
puts
"Retention Policy Locked:
#{
bucket
.
retention_policy_locked?
}
"
puts
"Requester Pays:
#{
bucket
.
requester_pays
}
"
puts
"Self Link:
#{
bucket
.
api_url
}
"
puts
"Time Created:
#{
bucket
.
created_at
}
"
puts
"Versioning Enabled:
#{
bucket
.
versioning?
}
"
puts
"Index Page:
#{
bucket
.
website_main
}
"
puts
"Not Found Page:
#{
bucket
.
website_404
}
"
puts
"Labels:"
bucket
.
labels
.
each
do
|
key
,
value
|
puts
" -
#{
key
}
=
#{
value
}
"
end
puts
"Lifecycle Rules:"
bucket
.
lifecycle
.
each
do
|
rule
|
puts
"
#{
rule
.
action
}
-
#{
rule
.
storage_class
}
-
#{
rule
.
age
}
-
#{
rule
.
matches_storage_class
}
"
end
end
What's next
To search and filter code samples for other Google Cloud products, see the Google Cloud sample browser .