Sample code for 30+ languages & platforms
Dart

Manage Cloud Storage Bucket Labels

See more Google Cloud Storage Examples

Demonstrates how to add, update, and delete labels for a Cloud Storage bucket.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  // This example uses a previously obtained access token having permission for the 
  // scope "https://www.googleapis.com/auth/cloud-platform"

  // In this example, Get Google Cloud Storage OAuth2 Access Token, 
  // the service account access token was saved to a text file.  This example fetches the access token from the file..
  final sbToken = CkStringBuilder();
  sbToken.loadFile('qa_data/tokens/googleCloudStorageAccessToken.txt', 'utf-8');

  // ---- Step 1
  // Create the JSON body of the PATCH request that will be sent.
  // This specifies labels to be added, updated, and/or deleted.
  // (To delete a label, set its value equal to null.)

  // {
  //   "labels": {
  //     "new_label_key": "new_label_value",
  //     "existing_label_key": "updated_label_value",
  //     "old_label_key": null
  //   }
  // }

  // ---------
  // Important
  // ---------
  // You can apply multiple labels to each bucket, with a maximum of 64 labels per bucket.

  //     - Keys and values cannot be longer than 63 characters each.
  //     - Keys and values can only contain lowercase letters, numeric characters, underscores, and dashes. International characters are allowed.
  //     - Label keys must start with a lowercase letter and international characters are allowed.
  //     - Label keys cannot be empty.

  // Build JSON to update labels.
  // 
  // During the testing of this example, my bucket already has the following labels:
  // {
  //  "labels": {
  //   "test1": "xyz",
  //   "test": "abc",
  //   "a": "abc"
  //  }
  // }

  // For this example, I'm going to add a label "b", delete the label "test1", and update
  // the label "test".
  final json = CkJsonObject();
  json.updateString('labels.b', 'bbb');
  json.updateString('labels.test', 'abc123');
  json.updateNull('labels.test1');

  // ---- Step 2
  // Send a PATCH equivalent to this curl command

  // curl -X PATCH --data-binary @[JSON_FILE_NAME].json \
  //     -H "Authorization: Bearer [OAUTH2_TOKEN]" \
  //     -H "Content-Type: application/json" \
  //     "https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]?fields=labels"

  final http = CkHttp();
  http.authToken = sbToken.getAsString();

  http.setUrlVar('bucket_name', 'chilkat-ocean');
  final url = 'https://www.googleapis.com/storage/v1/b/{\$bucket_name}?fields=labels';
  final resp = CkHttpResponse();
  try {
    http.httpJson('PATCH', url, json, 'application/json', resp);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final responseCode = resp.statusCode;
  if (responseCode == 401) {
    print(resp.bodyStr);
    print('If invalid credentials, then it is likely the access token expired.');
    print('Your app should automatically fetch a new access token and re-try.');
    return;
  }

  // Note: A 400 response code is likely caused by illegal characters used for a label name and/or value.

  print('Response code: $responseCode');
  print('Response body');
  print(resp.bodyStr);

  // A response code = 200 indicates success, and the response body contains the JSON
  // for the new/updated set of labels
  // Response code: 200
  // Response body
  // {
  //  "labels": {
  //   "test": "abc123",
  //   "a": "abc",
  //   "b": "bbb"
  //  }
  // }
}