Sample code for 30+ languages & platforms
Delphi DLL

Manage Bucket Storage Class

See more Google Cloud Storage Examples

Demonstrates how to manage a bucket's default storage class.

See Cloud Storage Classes for information about storage classes.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Http, StringBuilder, HttpResponse, JsonObject;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
sbToken: HCkStringBuilder;
json: HCkJsonObject;
http: HCkHttp;
url: PWideChar;
resp: HCkHttpResponse;
responseCode: Integer;

begin
success := False;

// 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..
sbToken := CkStringBuilder_Create();
CkStringBuilder_LoadFile(sbToken,'qa_data/tokens/googleCloudStorageAccessToken.txt','utf-8');

// ---- Step 1
// Create the JSON body of the PUT request that will be sent.

// {
//   "storageClass": "[STORAGE_CLASS]"
// }
// 

json := CkJsonObject_Create();
// Be careful if using the "regional" storage class.  See the note below about the 400 error response.
CkJsonObject_UpdateString(json,'storageClass','nearline');

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

// curl -X PUT --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=storageClass"

http := CkHttp_Create();
CkHttp_putAuthToken(http,CkStringBuilder__getAsString(sbToken));

CkHttp_SetUrlVar(http,'bucket_name','chilkat-ocean');
url := 'https://www.googleapis.com/storage/v1/b/{$bucket_name}?fields=storageClass';
resp := CkHttpResponse_Create();
success := CkHttp_HttpJson(http,'PUT',url,json,'application/json',resp);
if (success = False) then
  begin
    Memo1.Lines.Add(CkHttp__lastErrorText(http));
    Exit;
  end;

responseCode := CkHttpResponse_getStatusCode(resp);
if (responseCode = 401) then
  begin
    Memo1.Lines.Add(CkHttpResponse__bodyStr(resp));
    Memo1.Lines.Add('If invalid credentials, then it is likely the access token expired.');
    Memo1.Lines.Add('Your app should automatically fetch a new access token and re-try.');
    Exit;
  end;

// On my first try at running this code, I received the following error response:
// Response code: 400
// Response body
// {
//  "error": {
//   "errors": [
//    {
//     "domain": "global",
//     "reason": "invalid",
//     "message": "The combination of locationConstraint and storageClass you provided is not supported for your project"
//    }
//   ],
//   "code": 400,
//   "message": "The combination of locationConstraint and storageClass you provided is not supported for your project"
//  }
// }
// 

// This was because my storage location was a Multi-regional location, and I tried to assign the "regional" storage class,
// which is not allowed. 

Memo1.Lines.Add('Response code: ' + IntToStr(responseCode));
Memo1.Lines.Add('Response body');
Memo1.Lines.Add(CkHttpResponse__bodyStr(resp));

// A response code = 200 indicates success, and the response body contains the JSON
// 
// Response code: 200
// Response body
// {
//  "storageClass": "NEARLINE"
// }
// 

CkStringBuilder_Dispose(sbToken);
CkJsonObject_Dispose(json);
CkHttp_Dispose(http);
CkHttpResponse_Dispose(resp);

end;